可能重复:
Why XML-Serializable class need a parameterless constructor
有没有人知道是否可以阻止从一系列程序集之外调用公共构造函数?
我正在做的是提出一个具有XML可序列化类的类库。如果在没有设置各种属性的情况下构造这些类是没有意义的,所以我想要阻止该状态。
我想知道是否有办法阻止任何人调用我的公共构造函数,并将其保留在那里仅用于序列化?
答案 0 :(得分:1)
通常,我会创建一个公共构造函数,其参数将使对象有效,并创建一个具有有效默认值的公共无参数构造函数。
public foo() {
this.bar = -1;
}
public foo(int bar) {
this.bar = bar;
}
可以根据您的具体情况使用私有/内部构造函数,您可以创建一个工厂模式来处理外部代码的对象创建。
答案 1 :(得分:0)
要实现您的要求,您应该将构造函数设为私有,然后使用getInstance方法返回对象(如果正确的程序集调用getInstance)。如果将调用该函数的对象或程序集作为其参数之一传递,则可以在getInstance方法内部进行检查。
答案 2 :(得分:0)
我不知道它是否适用于您的情况,但您可以检查调用程序集:
if (Assembly.GetCallingAssembly().GetName().Name == "Forbidden.Assembly")
{
throw new Exception(...);
}