我有一个基类和一个派生类。由于这两个类都是可序列化的,因此需要具有默认构造函数。但我想阻止访问基类的默认构造函数,因为如果有人使用默认构造函数创建对象,它可能会导致问题。我不能把它作为私有或内部,因为它是基类。将其设为私有会在派生类中显示错误。错误是base没有任何无参数构造函数。如何防止访问基类的默认构造函数?以下是示例代码。
[Serializable]
public class Test1()
{
public Test1()
{
}
public Test1(int i, int j)
{
}
public Test1(int i, int j, int k)
{
}
}
[Serializable]
public class Test2():Test1
{
public Test2():base()
{
}
public Test2(int i, int j):base(i,j)
{
}
public Test2(int i, int j, int k):base(i,j,k)
{
}
}
答案 0 :(得分:1)
使用protected
。
protected关键字是成员访问修饰符。受保护的成员 可以在其类和派生类实例中访问。为一个 protected与其他访问修饰符的比较。
public class Test1()
{
protected Test1()
{
}
public Test1(int i, int j)
{
}
public Test1(int i, int j, int k)
{
}
}
答案 1 :(得分:1)
继续在Constructor
中抛出异常,因为Serializer
不会使用它。如果有人使用他是罪魁祸首:p
[Serializable]
public class Test1()
{
public Test1()
{
throw new InvalidOperationException("Default constructor shouldn't be used")
}
public Test1(int i, int j)
{
}
public Test1(int i, int j, int k)
{
}
}
答案 2 :(得分:0)
我为这个案子搜查了几个问题。几乎拥有它的一个解决方案是使用过时的anotaion和paramater来实现构建失败。
...
[Serializable]
public class Test2():Test1
{
[Obsolete("Don't use the default constructor.", true)]
public Test2():base()
{
}
...