Giao diện định nghĩa thuộc tính, phương thức và sự kiện, đây là các thành viên của giao diện. Giao diện chỉ chứa khai báo của các thành viên. Việc định nghĩa các thành viên là trách nhiệm của lớp dẫn xuất.
Abstract class ở một số mức độ phục vụ cùng mục đích, tuy nhiên, chúng chủ yếu được dùng khi chỉ vài phương thức được khai báo bởi lớp cơ sở và lớp dẫn xuất triển khai các chức năng.
Hãy xem sự khác biệt giữa Abstract class và Interface trong C#.
Kế thừa (Inherit)
Một lớp có thể kế thừa nhiều hơn một interface, trong khi một lớp chỉ có thể kế thừa một abstract class.
Trường thành viên (Member Field)
Bạn không thể định nghĩa trường trong Interface trong khi nó được định nghĩa trong abstract class.
Bộ chỉ định truy cập (Access Modifiers)
Interface không có public, private, protected, internal v.v. vì trong interface mặc định mọi thứ đều là public.
Kế thừa đa hình (Multiple Inheritance)
Kế thừa đa hình không thể đạt được bằng Abstract class trong khi với Interface chúng ta có thể đạt được.