我无法使用基类对象访问派生类的属性成员。
情景:
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
}
}
答案 0 :(得分:6)
在访问派生类中访问属性时遇到问题的原因是基类没有(更重要的是不应该)知道它们的任何内容。不同的派生类可以具有不同的添加属性集。让基类意识到这一点会抵消面向对象设计的重要原则。我想到的一个原则是Liskov Substitution Principle。
答案 1 :(得分:0)
如上所述,BaseClass中不存在名称。
将“name”移动到基类或创建一个单独的Write Method来写入继承类的特定数据。
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,然后将其输出到您的控制台