class A
工具IC
class B
工具IC
class Factory
有方法GetObject(int x)
;x=0
对于A
,x=1
对于B
.
如何强制使用Factory.GetObject
方法来创建类型的对象A
并B
防止类似的东西new A()
,应该是Factory.GetObject(0)
?
class A
工具IC
class B
工具IC
class Factory
有方法GetObject(int x)
;x=0
对于A
,x=1
对于B
.
如何强制使用Factory.GetObject
方法来创建类型的对象A
并B
防止类似的东西new A()
,应该是Factory.GetObject(0)
?
如何强制使用 Factory GetObject 方法来创建 A 和 B 类型的对象并防止类似 new A()
您不能强制使用Factory.GetObject
,这是您应该在将 A 和 B 构造函数标记为内部之后在您提供的 API 文档中编写的内容。
public class A: IC
{
internal A() { }
}
public class B: IC
{
internal B() { }
}
public static class Factory
{
public static IC GetObject(int x)
{
if (x == 0)
{
return new A();
}
if (x == 1)
{
return new B();
}
throw new ArgumentException("x must be 1 or 2", "x");
}
}
这样,其他程序集将无法访问这些构造函数。也不要忘记反射,无论你多么努力地隐藏它们,它都允许直接实例化这些类。
我不确定它是否仍然相关(已经一年了......),但这里是你如何实现工厂使用的进一步执行:
public class A
{
internal protected A() {}
}
public class AFactory
{
public A CreateA()
{
return new InternalA();
}
private class InternalA : A
{
public InternalA(): base() {}
}
}
使用类 A 的组件不能直接创建它(只要它们不继承它......)。