我可能完全错了..
public class BaseClass
{
public string result { get; set; }
public BaseClass(){}
public BaseClass(string x) {
result = doThing(x);
}
public virtual string doThing(string x)
{
return x;
}
}
public class DerivedClass : BaseClass
{
public DerivedClass(){}
public DerivedClass(string x):base(x){}
public override string doThing(string x)
{
return "override" + x;
}
}
我希望新的 DerivedClass("test") 具有“overridetest”的结果,但它没有:它调用 doThing 的基本方法。我错过了什么吗?我是否需要创建一个 AbstractClass 并让 BaseClass 和 DerivedClass 继承自它,派生类也覆盖方法?
最佳答案
问题是您正在构造函数中进行虚拟调用。详细说明了此问题的机制和可能的解决方法 here .
简而言之,当你进入基类的构造函数时,重写的函数还没有被构造出来,因此调用了基类中的虚函数。
关于c# - 如何覆盖从构造函数调用的基类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8259703/