在控制基类时,是否存在应该使用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;}
}
我知道的一种情况是,如果要将数据绑定到从另一个接口继承的接口,并且要绑定到基本接口中的成员,则必须在.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)。例如,使用嵌套类的情况。