是否存在在控制基类时应使用new而不是override的情况?

时间:2012-03-14 19:44:27

标签: c# inheritance polymorphism

当“new”有意义时,我遇到的示例涉及子类继承自库中的基类的维护情况,并且新版本的库添加了一个与一个名称相同的方法已在子类中实现。 (见:Brittle Base Classes

我想知道的是,是否存在使用“新”是一个很好的设计选择(而不是维护中可能需要的东西)的情况。使用覆盖无法完成的一件事是更改方法/属性的返回类型,同时保持名称相同,但我怀疑它是否是一个好的设计选择。

public class FruitBasket {
    public int Weight { get; set;}
    public List<Fruit> Fruits {get; set;}
}

public class AppleBasket : FruitBasket {
    public new List<Apple> Fruits  {get; set;}
}

2 个答案:

答案 0 :(得分:0)

我知道的一种情况是,如果要数据绑定到从另一个接口继承的接口,并且想要绑定到基接口中的成员,则必须在.Net WinForms中使用new。

例如,如果你有

public interface IOne
{
   int ID {get;set;}
   string Code {get;set;}
}

public interface ITwo : IOne
{
   DateTime CreatedDate {get;set;}
}

并且您将控件数据绑定到ITwo对象,然后除非将它们添加到ITwo界面,否则您将无法看到ID或代码属性。当然,您不必使用新的,但建议使用。

除此之外,我只在维护模式下使用它,即一旦应用程序发货,新的要求需要进行此类更改。

HTH, 迪安。

答案 1 :(得分:-1)

我认为MSDN参考显示new关键字的合理位置: (MSDN reference: new Modifier)。例如,使用嵌套类的情况。