如何在C#中访问其成员函数时阻止调用一个类的构造函数?

Lin*_*Lin 3 c# constructor design-patterns private

我有一个班级A和一个班级AStore.我的要求是阻止所有其他方法初始化类的实例A,他们应该从中获取实例AStore.另外,我还需要A从实例访问成员函数.

工厂模式不适合这个问题,因为构造函数A仍然是公共的.理想情况下,在调用类的构造函数时,它应该抛出编译错误,A同时可以访问其成员函数.

我可以获得C#解决方案吗?

ven*_*mit 5

为了限制其他人创建类A的实例,您可以使用私有构造函数和静态工厂方法来获取该类的实例.

public class A
{
  private A(){}

  public static A GetInstance()
  {
    return new A();
  }

  public void MemberFunctionOfA()
  {
  // blah blah...
  }
}
Run Code Online (Sandbox Code Playgroud)

要仅通过Astore实施A的实例创建,您可以使用protected modifier并从A派生AStore.这样,只有AStore才能访问受保护的成员,如'constructor'或'factory method':

public class Astore : A
{
    public A GetInstanceOfA()
    {
        return base.GetInstance();
    }
}

public class A
{
    protected A() { }

    protected A GetInstance()
    {
        return new A();
    }

    public void MemberFunctionOfA()
    {
        // blah blah...
    }
}

//Usage
public class ConsumerClass
{
    public void Test()
    {
        var a = new A(); // Compile error
        a = new Astore().GetInstanceOfA();
        a.MemberFunctionOfA();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是仍然有可能另一个班级说'UnWantedStore'可以从A派生并且服务A的实例.