我在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
定义的RoutedPropertyChangedEventHandler
类型int
,属性Minimum
类型int
和方法{{1}接受两个OnValueChanged
参数。
int
从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
类也定义了一组新的RangeBase
和members
,它们具有相同的基类成员名称,但此处的类型为{{1并标有methods
修饰符关键字。在这里忘记double
....现在让我解释一下真正的问题。
标有new
关键字的成员和属性会隐藏同名的Generics
成员和属性。除了new
方法之外,这也适用于我。智能感知仍会暴露BaseClass
和OnValueChanged
类型的Derived
和Base
类OnValueChanged
方法。在这里,我可以隐藏int
中double
类型的最小属性,int
中的{属性BaseClass
的最小属性。但它不适用于double
方法。任何人都可以解释为什么Dervied Class
关键字在这种情况下不起作用。在此先感谢!!!
答案 0 :(得分:3)
您无法隐藏签名不同的方法,它将被视为方法重载而不是method hiding。
类或结构中引入的常量,字段,属性,事件或类型会隐藏所有具有相同名称的基类成员。
在类或结构中引入的方法隐藏所有具有相同名称的非方法基类成员,并隐藏所有基类方法 相同签名(方法名称和参数计数,修饰符和 类型)。
在类或结构中引入的索引器会隐藏具有相同签名(参数计数和类型)的所有基类索引器。