Nếu chúng ta giả sử rằng lớp cơ sở không phải là một lớp giao diện thuần túy và sử dụng 2 ví dụ từ bên dưới, thì đây là cách tiếp cận tốt hơn, sử dụng định nghĩa lớp phương thức trừu tượng hay ảo?
Ưu điểm của phiên bản "trừu tượng" là nó có thể trông gọn gàng hơn và buộc lớp dẫn xuất phải đưa ra một triển khai có ý nghĩa hy vọng.
Ưu điểm của phiên bản "ảo" là nó có thể dễ dàng được kéo bởi các mô-đun khác và được sử dụng để thử nghiệm mà không cần thêm một loạt các khung cơ bản như phiên bản trừu tượng yêu cầu.
Phiên bản trừu tượng:
public abstract class AbstractVersion
{
public abstract ReturnType Method1();
public abstract ReturnType Method2();
.
.
public abstract ReturnType MethodN();
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
Phiên bản ảo:
public class VirtualVersion
{
public virtual ReturnType Method1()
{
return ReturnType.NotImplemented;
}
public virtual ReturnType Method2()
{
return ReturnType.NotImplemented;
}
.
.
public virtual ReturnType MethodN()
{
return ReturnType.NotImplemented;
}
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
return ReturnType.NotImplemented
? Nghiêm túc? Nếu bạn không thể từ chối loại chưa thực hiện tại thời gian biên dịch (bạn có thể; sử dụng các phương thức trừu tượng) ít nhất là ném một ngoại lệ.