New Modifier不隐藏Base类成员

时间:2014-07-19 12:43:56

标签: c# .net wpf oop

我在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定义的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类也定义了一组新的RangeBasemembers,它们具有相同的基类成员名称,但此处的类型为{{1并标有methods修饰符关键字。在这里忘记double ....现在让我解释一下真正的问题。

标有new关键字的成员和属性会隐藏同名的Generics成员和属性。除了new方法之外,这也适用于我。智能感知仍会暴露BaseClassOnValueChanged类型的DerivedBaseOnValueChanged方法。在这里,我可以隐藏intdouble类型的最小属性,int中的{属性BaseClass的最小属性。但它不适用于double方法。任何人都可以解释为什么Dervied Class关键字在这种情况下不起作用。在此先感谢!!!

1 个答案:

答案 0 :(得分:3)

您无法隐藏签名不同的方法,它将被视为方法重载而不是method hiding

  
      
  • 类或结构中引入的常量,字段,属性,事件或类型会隐藏所有具有相同名称的基类成员。

  •   
  • 在类或结构中引入的方法隐藏所有具有相同名称的非方法基类成员,并隐藏所有基类方法   相同签名(方法名称和参数计数,修饰符和   类型)。

  •   
  • 在类或结构中引入的索引器会隐藏具有相同签名(参数计数和类型)的所有基类索引器。

  •