Chúng ta đều biết C# là lập trình hướng đối tượng giống Java và hỗ trợ đầy đủ các khái niệm OOP: Đóng gói (Encapsulation), Trừu tượng (Abstraction), Kế thừa (Inheritance), và Đa hình (Polymorphism). Đối lập với Trừu tượng, cả Lớp trừu tượng và Interface đều cung cấp trừu tượng trong chương trình C#.
Trong lớp trừu tượng, chúng ta có thể tạo chức năng và yêu cầu lớp dẫn xuất triển khai. Interface cho phép định nghĩa chức năng/hàm nhưng KHÔNG thể triển khai. Lớp dẫn xuất implement interface và triển khai những hàm đó.
Dưới đây là những khác biệt quan trọng giữa Lớp Trừu Tượng và Interface.
| STT | Khóa | Lớp Trừu Tượng | Interface |
|---|---|---|---|
| 1 | Định Nghĩa | Theo định nghĩa chuẩn, lớp trừu tượng về mặt khái niệm là lớp không thể khởi tạo và thường triển khai như lớp có một hoặc nhiều hàm ảo thuần túy (abstract). | Ngược lại, Interface là mô tả các hàm thành viên mà lớp kế thừa interface này BẮT BUỘC phải triển khai. Nói cách khác, interface mô tả hành vi của lớp. |
| 2 | Triển Khai | Giống như thiết kế lớp thường trong C#, lớp trừu tượng cũng có triển khai riêng cùng với khai báo. | Ngược lại, Interface CHỈ có chữ ký (signature), KHÔNG có triển khai. Triển khai do lớp implement nó cung cấp. |
| 3 | Kế Thừa | Theo spec C#, một class chỉ extends MỘT class khác, do đó đa kế thừa KHÔNG đạt được bằng abstract class. | Ngược lại, với Interface một class CÓ THỂ implement NHIỀU interface, do đó đa kế thừa ĐẠT ĐƯỢC bằng interface. |
| 4 | Constructor | Giống các lớp C# khác, để khởi tạo, lớp trừu tượng cũng có constructor cung cấp instance để truy cập phương thức non-static. | Ngược lại, Interface KHÔNG có constructor nên không thể khởi tạo interface trực tiếp, dù phương thức có thể truy cập bằng instance của class implement nó. |
| 5 | Modifier (Trữ Truy Cập) | Vì abstract class giống lớp thường nên có thể chứa các access modifier: public, private, protected, v.v. | Ngược lại, vì Interface cần được implement để cung cấp triển khai phương thức bởi lớp khác nên CHỈ chứa public access modifier. |
| 6 | Hiệu Suất | Vì abstract class có phương thức và triển khai cho phương thức abstract nên có tham chiếu đến class implement, hiệu suất Nhanh HƠN so với Interface. | Ngược lại, hiệu suất interface CHẬM HƠN vì cần thời gian tìm phương thức thực tế trong class tương ứng. |