我有一個關於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));
}
}
RangeBase
是abstract class
定義int
類型的RoutedPropertyChangedEventHandler
,int
類型和接受兩個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
類也定義了一組新的members
和methods
具有基類成員的名稱相同,但這裏的類型是double
並打上new
修飾符關鍵字。忘記Generics
這裏....現在讓我解釋一下真正的問題。
標有new
關鍵字的成員和屬性隱藏了BaseClass
成員和具有相同名稱的屬性。在這裏,除了OnValueChanged
方法,這也適用於我。 Intellisense仍然暴露Derived
和Base
類OnValueChanged
類型的方法int
和double
。在這裏,我可以隱藏int
中的最小屬性BaseClass
,最小屬性類型double
的Dervied Class
。但它不適用於OnValueChanged
方法。任何人都可以解釋爲什麼new
關鍵字在這種情況下不起作用。提前致謝 !!!
它的超載,新的關鍵字是不必要的。 –
問題背後的問題:這不是繼承的好例子。 –
@RohitVats我已經在片段 –