【发布时间】:2014-09-10 12:12:01
【问题描述】:
我在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 和一个方法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));
}
}
从RangeBase派生的MyRange类也定义了一组新的members和methods,它们的基类成员名称相同,但这里的类型是double,并用new修饰符关键字标记.忘记Generics这里....现在让我解释一下真正的问题。
用new 关键字标记的成员和属性隐藏了同名的BaseClass 成员和属性。除了OnValueChanged 方法之外,这也适用于我。 Intellisense 仍然公开Derived 和Base 类OnValueChanged 类型int 和double 的方法。这里我可以在BaseClass 中隐藏int 类型的Minimum 属性和Dervied Class 中double 类型的Minimum 属性。但它不适用于OnValueChanged 方法。谁能解释为什么new 关键字在这种情况下不起作用。提前致谢!!!
【问题讨论】:
-
超载了,不需要new关键字。
-
问题背后的问题:这不是继承的好案例。
-
@RohitVats 我已经在 sn-p 中定义了一个名为 Minimum 的属性,具有不同的类型
-
@YuliamChandra 我同意这是超载的。但是新关键字是什么意思
-
@VimalCK,我已经解释过,“当实例是派生类型并且保存实例的变量类型也是派生类型时,它只是隐藏基成员,检查this post”