"Lớp trừu tượng" và "giao diện" là các khái niệm tương tự nhau, với giao diện là trừu tượng hơn của cả hai. Một yếu tố khác biệt là các lớp trừu tượng cung cấp các triển khai phương thức cho các lớp dẫn xuất khi cần. Tuy nhiên, trong C #, yếu tố khác biệt này đã bị giảm đi do sự ra đời gần đây của các phương thức mở rộng, cho phép triển khai được cung cấp cho các phương thức giao diện. Một yếu tố khác biệt là một lớp chỉ có thể kế thừa một lớp trừu tượng (nghĩa là không có nhiều kế thừa), nhưng nó có thể thực hiện nhiều giao diện. Điều này làm cho giao diện ít hạn chế và linh hoạt hơn. Vậy, trong C #, khi nào chúng ta nên sử dụng các lớp trừu tượng thay vì giao diện với các phương thức mở rộng?
Một ví dụ đáng chú ý của mô hình phương thức giao diện + mở rộng là LINQ, trong đó chức năng truy vấn được cung cấp cho bất kỳ loại nào thực hiện IEnumerable
thông qua vô số phương thức mở rộng.