Ba'zan ob'ektga yo'naltirilgan dasturlashda sinfni aniq nima qilish kerakligini aniqlash foydali bo'ladi, lekin buni qanday qilish keraklik noma`lum bo`ladi. Bunga misol yuqorida aytib o'tilgan abstrakt metoddir. Abstrakt metod metodning natijasi tipini va metodning tuzilishini belgilaydi, lekin uni qanday amalga oshirish belgilamaydi. Natijaviy sinfda uning asosiy sinfida aniqlangan har bir abstrakt metod o'zlashtirilishi kerak. Shunday qilib, abstrakt metod interfeysni belgilaydi, ammo metodni amalga oshirish emas. Albatta, abstrakt sinflar va metodlar ma'lum foyda keltiradi, lekin ularga asoslangan usullar yanada rivojlanishi mumkin. C# tilidainterfacekalit so'z bilan interfeys sinfdan ajratiladi va amalga oshiriladi. Sintaksis nuqtai nazaridan interfeyslar abstrakt sinflarga o'xshaydi. Ammo interfeysda hech qanday metodning tanasi bo'lmasligi mumkin. Bu shuni anglatadiki, interfeysda hech narsa amalga oshirilmaydi. U faqat nima qilish kerakligini ko'rsatadi, lekin qanday qilish kerakligini emas. Interfeys aniqlangandan so'ng, u har qanday sinflarda amalga oshirilishi mumkin. Bundan tashqari, bir nechta interfeyslarni bitta sinfda qo'llash mumkin. Sinf interfeysini amalga oshirish uchun ushbu interfeysda tasvirlangan metodlarning tanasi berilishi (ya'ni aniq amalga oshirilishi) kerak. Har bir sinfga o'z interfeysini amalga oshirishning batafsil aniqlash uchun to'liq erkinlik beriladi. Shunday qilib, bir xil interfeys ikki sinfda turli yo'llar bilan amalga oshirilishi mumkin. Shunga qaramay, ularning har birida ushbu interfeysning metodlari bir xil saqlanishi kerak. Bunday interfeysning ma'lum bo'lgan kodida ushbu ikki sinfning har qanday ob'ektlari ishlatilishi mumkin, chunki barcha ob'ektlar uchun interfeys bir xil bo'ladi. C# tilida interfeyslarini qo'llab-quvvatlash orqali polimorfizmning asosiy printsipi to'liq amalga oshirilishi mumkin: bitta interfeys - ko'plab metodlar.