2

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

外部组装:

MyClass myClass = factoryInstance.GetInstanceOfMyClass();

应该禁止在外面实例化这个类

禁止:

MyClass myClass = new MyClass();

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

4

2 回答 2

7

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

public class MyClass
{
    internal MyClass()
    {
    }
}

只要您的工厂方法位于同一个程序集中,它就可以创建您的类的实例,但是程序集之外的任何代码都无法做到这一点。

于 2012-11-15T15:04:49.313 回答
2

只需使构造函数在内部可见,这样它所包含的程序集之外的其他类就无法看到它。

组装 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();

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

于 2012-11-15T15:06:04.470 回答