[英]Block base constructor to child class
我确定这个问题在其他地方,但找不到。
我有一个抽象类,它将成为其他类的基础。 希望基类的基础构造函数不可访问,并且子类无法编辑行为,强制它们使用其他构造函数。
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
{
}
}
您需要使用正确的基类构造函数来执行您想要的操作:
public class Child : BaseClass
{
public Child(int x) : base(x)
{
X = X + 5;
}
}
请注意, Child
构造函数体现在使用受保护的字段X
,而不是参数x
。
只需省略无参数构造函数。 现在,每个派生类都被强制调用public BaseClass(int x)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.