我确定这个问题在其他地方,但找不到。
我有一个抽象类,它将作为其他类的基础。 希望基类的基构造函数不可访问,并且子类无法编辑行为,从而迫使它们使用另一个构造函数。
public abstract class BaseClass
{
protected int X;
private BaseClass() { } // Problematic accessor
public BaseClass(int x)
{
X = x;
}
}
public class Child : BaseClass
{
public Child(int x)
{
X = x + 5;
}
}
如果我将 BaseClass() 基构造函数设置为私有(private),它不会编译,但如果我将它设置为 protected ,则 Child 可以覆盖它。
有办法阻止 Child 修改基础构造函数吗?
编辑:我希望基础构造函数在类外也不可访问。
最佳答案
如果你不想在
中做任何事情 BaseClass()
构造函数,只需删除它(BaseClass
有一个显式构造函数,这就是为什么没有默认 一):
public abstract class BaseClass
{
//TODO: probably you want a property to read X
private int X; // <- private looks better for fields
public BaseClass(int x)
{
X = x;
}
}
对于 Child
类,您必须调用其基础构造函数,即 base(int x)
:
public class Child : BaseClass
{
public Child(int x)
: base(x + 5) // since X is private, let's move logic into the call
{
}
}
关于c# - block 基构造函数到子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32521170/