2013-12-15 68 views
1

我有ToString()定義在一個父類中的方式適用於幾乎所有的後代類,通常涉及調用名爲名稱的屬性。該屬性在子類中重新定義。從父類調用dervied方法c#

但是,這不起作用,因爲始終使用來自父類的Name屬性,即使當我在後代類中重新定義它時也是如此。

下面是一個例子:

using System; 

namespace test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Bar n = new Bar(); 
      Console.WriteLine(n); 
      Console.ReadLine(); 
     } 
    } 

    class Foo 
    { 
     public override string ToString() 
     { 
      return MyName; 
     } 

     public string MyName { get { return "foo"; }} 
    } 

    class Bar : Foo 
    { 
     public new string MyName { get { return "bar"; }} 
    } 
} 

這個例子的輸出是foo,但我希望它是bar

我在做什麼錯?或者我只是誤解了C#中繼承的基本方面?

回答

4

發生這種情況是因爲ToString()virtual

virtual關鍵字添加到您的基本屬性,並在派生屬性中將new更改爲override

+0

是的,我不明白虛擬。現在我知道了。謝謝! – longneck