c# - 如何覆盖从构造函数调用的基类方法

标签 c# class inheritance

我可能完全错了..

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/

相关文章:

python - 如何从父调用子构造函数?

java - java中的基本继承

c# - 是否允许在类外修改 C# 只读字段?

Javascript es6 覆盖静态属性

c# - ASP vNext 和 PostgreSql

c++ - 是否可以用模板函数替换两个相似的成员函数?

Haskell 记录语法和类型类

c++ - 通过从文本文件中读取它的名称来构造一个对象

C# XAML : UI not update after change an instance of ObservableCollection

c# - 在 asp.net 中传递数据列表值(已关闭)