Title Differrence between Virtual and Abstract method.

Ta đã biết các từ khóa Virtual hoặc Abstract (bên lớp cơ sở) và Override (trên lớp dẫn xuất) hỗ trợ tạo đa hình (Polymorphism) cho các phương thức (Method) của object (1 trong những điểm mạnh của OOP). Phương thức của lớp cha (cơ sở) sử dụng với từ khóa Virtual hoặc Abstract,
tạo phương thức cùng tên ở lớp con (dẫn xuất) với Override..Vậy là ta đã có 1 Method đa hình. Vậy khi nào sử dụng Virtual, khi nào dùng Abstract ở lớp cơ sở (lớp Cha)?

Sự khác nhau:

Điểm đầu tiên là Virtual cho phép lớp Con không nhất thiết phải tạo Override cho method Virtual ở lớp Cha. Ngược lại Abstract thì bắt buộc.
Abstract Class Cha 
{
....
public virtual void AAA() { }
public abstract void BBB() ;
....
}

Class Con : Cha
{
....
public override void AAA() { } // có thể không cần hàm này
public override void BBB() { } // buộc có.
....
}

Thứ 2 là cách khai báo, method Virtual có các hàm bên trong còn Abstract thì tuyệt tối không.
public virtual void AAA() { code here }
public abstract void BBB() ;

Thứ 3 là method abstract phải nằm trong class abstract như bên dưới.
Abstract Class Cha 
{
public abstract void BBB() ;
}