在控制基类时,是否存在应该使用new而不是重写的情况

本文关键字:new 情况 重写 基类 控制 是否 存在 | 更新日期: 2023-09-27 18:27:44

当"new"有意义时,我遇到的例子涉及维护情况,其中子类从库中的基类继承,而库的新版本添加了一个与子类中实现的方法同名的方法。(参见:脆性基类)

我想知道的是,在某些情况下,使用"新"是一个很好的设计选择(而不是在维护中变得必要的东西)。重写不能做的一件事是在保持名称不变的同时更改方法/属性的返回类型,但我怀疑这是否是一个好的设计选择。

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;}
}

在控制基类时,是否存在应该使用new而不是重写的情况

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

例如,如果你有

public interface IOne
{
   int ID {get;set;}
   string Code {get;set;}
}
public interface ITwo : IOne
{
   DateTime CreatedDate {get;set;}
}

如果您将控件数据绑定到ITwo对象,那么除非您将ID或Code属性添加到ITwo接口,否则您将无法看到它们。当然,你不必使用new,但它是推荐的。

除此之外,我只在维护模式下使用过它,也就是说,一旦应用程序发布,新的需求需要进行这样的更改。

HTH,院长

我认为MSDN参考资料显示了new关键字的正确性:(MSDN参考:new Modifier)。例如,使用嵌套类的情况。