Tôi muốn có các thiết lập sau:.NET - cách tạo một lớp sao cho chỉ có một lớp cụ thể khác có thể khởi tạo nó?
class Descriptor
{
public string Name { get; private set; }
public IList<Parameter> Parameters { get; private set; } // Set to ReadOnlyCollection
private Descrtiptor() { }
public Descriptor GetByName(string Name) { // Magic here, caching, loading, parsing, etc. }
}
class Parameter
{
public string Name { get; private set; }
public string Valuie { get; private set; }
}
Toàn bộ cấu trúc sẽ được đọc-chỉ một lần nạp từ một file XML. Tôi muốn làm như vậy, chỉ có lớp Descriptor mới có thể khởi tạo một tham số. Một cách để làm điều này là tạo một giao diện IParameter
và sau đó đặt riêng lớp Parameter
trong lớp Mô tả, nhưng trong việc sử dụng thực tế, Tham số sẽ có một số thuộc tính và tôi muốn tránh xác định lại chúng hai lần. .
Điều này có thể bằng cách nào đó không?
Điều này vẫn cho phép bạn tạo một lớp con khác của Tham số và khởi tạo qua đó. Làm cho hàm tạo 'nội bộ được bảo vệ', có lẽ. –
@Martinho: bạn không chính xác. Đó là một quan niệm sai lầm phổ biến rằng "bảo vệ nội bộ" ngăn chặn các lớp học từ bên ngoài lắp ráp từ subclassing. Bạn nên nghĩ về nó như được bảo vệ HOẶC nội bộ, không được bảo vệ VÀ nội bộ - tức là lớp có thể được bắt nguồn từ bất kỳ lớp nào khác bên trong hoặc bên ngoài assembly, nhưng chỉ có thể được khởi tạo trong nội bộ. – Joe