c# – .NET – 如何创建一个类,以便只有一个其他特定的类可以实
发布时间:2020-12-15 07:38:56 所属栏目:百科 来源:网络整理
导读:我想要进行以下设置: class Descriptor{ public string Name { get; private set; } public IListParameter Parameters { get; private set; } // Set to ReadOnlyCollection private Descrtiptor() { } public Descriptor GetByName(string Name) { // Mag
我想要进行以下设置:
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; } } 从XML文件加载后,整个结构将是只读的.我想这样做,只有描述符类可以实例化一个参数. 做一个这样做的一个方法是使一个IParameter接口,然后在Descriptor类中使Parameter类为私有,但是在实际使用中,Parameter将有几个属性,我想避免重新定义它们两次. 这有可能吗 解决方法
使其成为实现特定接口的私有嵌套类.然后,只有外部类才能实例化,但任何人都可以使用它(通过接口).例:
interface IParameter { string Name { get; } string Value { get; } } class Descriptor { public string Name { get; private set; } public IList<IParameter> Parameters { get; private set; } private Descriptor() { } public Descriptor GetByName(string Name) { ... } class Parameter : IParameter { public string Name { get; private set; } public string Value { get; private set; } } } 如果您真的必须避免该接口,您可以创建一个具有所有属性但声明受保护构造函数的公共抽象类.然后,您可以创建一个从公共抽象继承的私有嵌套类,该类只能由外部类创建,并将其作为基类型返回.例: public abstract AbstractParameter { public string Name { get; protected set; } public string Value { get; protected set; } } class Descriptor { public string Name { get; private set; } public IList<AbstractParameter> Parameters { get; private set; } private Descriptor() { } public Descriptor GetByName(string Name) { ... } private class NestedParameter : AbstractParameter { public NestedParameter() { /* whatever goes here */ } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |