Tôi đã cố gắng để tạo ra một nhà máy phải trả về một đối tượng khác nhau của một giao diện chung (nói Item
) theo thông số đầu vào (tôi gọi nó là một ngữ cảnh) của hàm getItem(A context)
Đa hình và quá tải với các phương pháp tĩnh trong C#.
Bây giờ, giả sử tôi xác định một loại ngữ cảnh mới: B
được kế thừa từ A
.
Tôi muốn trả lại một mục khác tùy thuộc vào việc đối tượng được chuyển đến nhà máy có thuộc loại B
hoặc A
hay không.
tôi đã cố gắng để làm như sau (quá tải phương pháp):
class Factory
{
static Item getItem(A context) {...}
static Item getItem(B context) {...}
}
này hoạt động tốt nếu tôi làm điều gì đó như thế này:
B bContext=new B();
Item it=Factory.getItem(bContext);
Tuy nhiên, nếu tôi đúc và đối tượng để gõ A
:
A bContext=(A) new B();
Item it=Factory.getItem(bContext);
phương pháp nhà máy đầu tiên được gọi.
Tôi nghĩ rằng đa hình sẽ đảm bảo thực hiện phương pháp thứ hai ngay cả sau khi diễn viên, và tôi muốn biết nếu tôi bỏ lỡ một cái gì đó?
Tôi biết rằng tôi có thể tiếp tục có một phương pháp duy nhất và sử dụng toán tử is
để kiểm tra loại biến là gì, nhưng tôi nghĩ giải pháp tôi đã trình bày ở trên là thanh lịch hơn một chút.