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

标签 c# inheritance polymorphism

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

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

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

最佳答案

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

例如,如果你有

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

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

并且您将控件数据绑定(bind)到 ITwo 对象,然后您将无法看到 ID 或代码属性,除非您将它们添加到 ITwo 界面。当然不一定非要用new,但是推荐。

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

喂, 院长。

关于c# - 在控制基类时,是否存在应该使用 new 而不是 override 的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9709062/

相关文章:

javascript - 我对javascript原型(prototype)继承的误解

c++ - 从派生实例的基类调用派生类中的内联成员

C# 多态性和方法继承

c# - 将父类(super class)传递给 C# 函数(带有 Java 序曲)

c# - 从 ASP.NET MVC 应用程序发送传真

c# - 具有负载平衡的高负载服务器,使用 WCF 和 MSMQ

c# - U3D-如何在 Mac 上以单声道启用 System.Data?

c# - 如何通过反射调用带有枚举(enum)参数的方法?

c++ - 无法转换 'this' 指针...继承

java - 我有一个关于java多态性的问题