如何防止来自外部的类实例化但保持可用?

时间:2012-11-15 15:03:34

标签: c# factory .net-assembly

我为一个程序集写了一个类,只能由这个程序集中的工厂实例化。

外部大会:

MyClass myClass = factoryInstance.GetInstanceOfMyClass();

禁止在

之外实施这门课程

禁止:

MyClass myClass = new MyClass();

我见过一些复杂的方法。有一种我想念的简单方法吗?

2 个答案:

答案 0 :(得分:7)

最简单的方法应该是构造函数internal

public class MyClass
{
    internal MyClass()
    {
    }
}

只要您的工厂方法位于同一个程序集中,它就能够创建您的类的实例,但程序集之外的任何代码都无法执行此操作。

答案 1 :(得分:2)

只需使构造函数 internal 的可见性,以便其中包含的程序集之外的其他类都不能看到它。

汇编1

public class MyClass
{
  internal MyClass()
  {
    // ... code here ...
  }
}

public class MyFactory
{
  public MyClass GetInstanceOfMyClass()
  {
    return new MyClass();
  }
}

大会2

// Invalid
MyClass myClass = new MyClass();

// Valid
MyClass myClass = myFactoryInstance.GetInstanceOfMyClass();

然后你可以在程序集中(通过你的工厂)实例化这个类,但它不能在程序集之外实例化。