我为一个程序集编写了一个类,该程序集只能由该程序集中的工厂实例化。
外部组装:
MyClass myClass = factoryInstance.GetInstanceOfMyClass();
应该禁止在外面实例化这个类
禁止:
MyClass myClass = new MyClass();
我见过一些复杂的方法。有没有我想念的简单方法?
我为一个程序集编写了一个类,该程序集只能由该程序集中的工厂实例化。
外部组装:
MyClass myClass = factoryInstance.GetInstanceOfMyClass();
应该禁止在外面实例化这个类
禁止:
MyClass myClass = new MyClass();
我见过一些复杂的方法。有没有我想念的简单方法?
最简单的方法应该是制作构造函数internal
:
public class MyClass
{
internal MyClass()
{
}
}
只要您的工厂方法位于同一个程序集中,它就可以创建您的类的实例,但是程序集之外的任何代码都无法做到这一点。
只需使构造函数在内部可见,这样它所包含的程序集之外的其他类就无法看到它。
组装 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();
然后你可以在程序集中(通过你的工厂)实例化这个类,但它不能在程序集之外实例化。