2014-07-19 68 views
-3

我有一個關於new修飾符關鍵字的問題,詳細解釋如下。新的修飾符沒有隱藏基類的成員

public abstract class RangeBase 
{ 
    public event RoutedPropertyChangedEventHandler<int> ValueChanged; 
    public int Minimum { get; set; } 

    public void OnValueChanged(int oldValue, int newValue) 
    { 
     ValueChanged(this, new RoutedPropertyChangedEventArgs<int>(1, 2)); 
    } 
} 

RangeBaseabstract class定義int類型的RoutedPropertyChangedEventHandlerint類型和接受兩個int參數的方法OnValueChanged的屬性Minimum。從RangeBase衍生

public class MyRange : RangeBase 
{ 
    public new event RoutedPropertyChangedEventHandler<double> ValueChanged; 

    public new double Minimum { get; set; } 

    public new void OnValueChanged(double oldValue, double newValue) 
    { 
     ValueChanged(this, new RoutedPropertyChangedEventArgs<double>(1, 2)); 
    } 
} 

MyRange類也定義了一組新的membersmethods具有基類成員的名稱相同,但這裏的類型是double並打上new修飾符關鍵字。忘記Generics這裏....現在讓我解釋一下真正的問題。

標有new關鍵字的成員和屬性隱藏了BaseClass成員和具有相同名稱的屬性。在這裏,除了OnValueChanged方法,這也適用於我。 Intellisense仍然暴露DerivedBaseOnValueChanged類型的方法intdouble。在這裏,我可以隱藏int中的最小屬性BaseClass,最小屬性類型doubleDervied Class。但它不適用於OnValueChanged方法。任何人都可以解釋爲什麼new關鍵字在這種情況下不起作用。提前致謝 !!!

+2

它的超載,新的關鍵字是不必要的。 –

+0

問題背後的問題:這不是繼承的好例子。 –

+0

@RohitVats我已經在片段 –

回答

2

您不能隱藏簽名不同的方法,它將被視爲方法重載而不是method hiding

  • 的常量,字段,屬性,事件,或在引入類或結構類型隱藏了所有基類成員具有相同的名稱。

  • 在引入類或結構的方法隱藏了所有非方法基類成員具有相同的名稱,並與 相同簽名(方法名稱和參數計數所有基類的方法,改性劑和 類型)。

  • 在類或結構中引入的索引器將隱藏具有相同簽名(參數數量和類型)的所有基類索引器。

相關問題