2010-12-01 134 views
0

我无法使用基类对象访问派生类的属性成员。从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 
    } 

} 
+2

名称是从来没有定义在BaseClass中。 – 2010-12-01 21:26:38

回答

6

你必须在派生类中访问性能问题的原因是基类没有(更重要的是应该)知道他们什么。不同的派生类可以有一组不同的添加属性。让基类意识到这一点将抵消面向对象设计的重要原则。想到的一个原则是Liskov Substitution Principle

0

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

将“名称”移动到基类或创建一个单独的写入方法来写入继承的类的特定数据。

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) 
    } 

} 

不知道为什么类将接受不同的类实例写时,你可以调用本身写。在BaseClass的signture更改为

public virtual Write() 

或像器WebControls

public virtual Write(HtmlTextWriter writer); 

,如果你想简单的调试,你可以只序列化到JSON或XML,然后输出到控制台

相关问题