2010-12-01 60 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,然後輸出到控制檯

相關問題