"Абстрактний клас" та "інтерфейс" є подібними поняттями, причому інтерфейс є більш абстрактним з двох. Одним з відмінних факторів є те, що абстрактні класи забезпечують реалізацію методів для похідних класів, коли це необхідно. Однак у C # цей диференціюючий коефіцієнт був зменшений нещодавним введенням методів розширення, які дозволяють забезпечити реалізацію методів інтерфейсу. Ще один диференціюючий фактор полягає в тому, що клас може успадковувати лише один абстрактний клас (тобто багаторазового успадкування немає), але він може реалізовувати декілька інтерфейсів. Це робить інтерфейси менш обмежуючими та більш гнучкими. Отже, на C #, коли ми повинні використовувати абстрактні класи замість інтерфейсів із методами розширення?
Помітним прикладом моделі методу інтерфейсу + розширення є LINQ, де функціональність запитів надається для будь-якого типу, що реалізується IEnumerable
за допомогою безлічі методів розширення.