c# – .NET – 如何创建一个类,以便只有一个其他特定的类可以实例化它?

前端之家收集整理的这篇文章主要介绍了c# – .NET – 如何创建一个类,以便只有一个其他特定的类可以实例化它?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要进行以下设置:
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 */ }
    }
}
原文链接:https://www.f2er.com/csharp/96078.html

猜你在找的C#相关文章