从CSharp中的基类对象访问派生类属性成员

我无法使用基类对象访问派生类的属性成员。

场景:

public class BaseClass{ public virtual Write(BaseClass data){ } } public class DerivedClass : BaseClass{ private string name: public string Name {get {return name} set {name = value;} } public override Write(BaseClass data){ Console.println(data.Name); // gives me error here } } 

您在派生类中访问属性时遇到问题的原因是基类不会(更重要的是不应该 )知道它们的任何信息。 不同的派生类可以具有不同的添加属性集。 让基类意识到这一点会抵消面向对象设计的重要原则。 想到的一个原则是Liskov替代原则 。

如上所述,BaseClass中不存在名称。

将“name”移动到基类或创建一个单独的Write Method来写入inheritance类的特定数据。

 public class DerivedClass : BaseClass{ public string Name { get; set; } public override void Write(DerivedClass data) { Console.printLn(data.Name); base.Write(data) } // why print a different instance, just write self public void Write() { Console.printLn(this.Name); base.Write(this) } } 

当你可以自己调用write时,不确定为什么Class会接受一个不同的Class Instance来编写。 将BaseClass signture更改为

 public virtual Write() 

或者像WebControls

 public virtual Write(HtmlTextWriter writer); 

如果您只想调试,可以序列化为JSON或XML,然后将其输出到您的控制台