我为一个程序集写了一个类,只能由这个程序集中的工厂实例化。
外部大会:
MyClass myClass = factoryInstance.GetInstanceOfMyClass();
禁止在
之外实施这门课程禁止:
MyClass myClass = new MyClass();
我见过一些复杂的方法。有一种我想念的简单方法吗?
答案 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();
然后你可以在程序集中(通过你的工厂)实例化这个类,但它不能在程序集之外实例化。