Một thiết kế có thể là sẽ sử dụng một constructor tin trên một lớp trừu tượng:
public abstract class BaseClass
{
private BaseClass(Object param)
{
//Do something with parameters
}
//Provide various methods that descendant classes will know how to perform
public static BaseClass FromObject(Object value)
{
//Based on object, choose which type of derived class to construct...
}
private class HiddenDerivedA : BaseClass
{
public HiddenDerivedA(Object value)
: base(value)
{
}
}
private class HiddenDerivedB : BaseClass
{
public HiddenDerivedB(Object value)
: base(value)
{
}
}
}
mô hình này rất hữu ích nếu việc triển khai nguồn gốc được chặt chẽ cùng với logic lựa chọn được sử dụng để xây dựng chúng và bạn muốn cung cấp một mức độ cao của vật liệu cách nhiệt từ phần còn lại của mã của bạn. Nó giúp bạn có trách nhiệm phải hỗ trợ những người thừa kế khác ngoài những người bạn dự định rõ ràng và cho phép bạn phơi bày tất cả trạng thái riêng tư từ lớp cơ sở đến các lớp dẫn xuất của bạn.
Nguồn
2010-08-11 00:05:12
Trong 2: Bạn có nghĩa là từ khóa "này". "base" nằm trong các lớp dẫn xuất và không thể gọi các ctors riêng. –
@ John: Có, thx. Sẽ chỉnh sửa. –
@John, "cơ sở" có thể gọi các nhà thầu tư nhân nếu kiểu phát sinh là một lớp lồng nhau của kiểu dẫn xuất. –