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

时间:2010-12-01 21:22:40

标签: c# inheritance

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

情景:

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
    }

}

2 个答案:

答案 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,然后将其输出到您的控制台