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/

相关文章:

c# - 如何模拟按键事件?

c# - 将 WinForm ContextMenu 背景设为灰色?

c# 将文本文件添加到二维数组

java - 访问继承成员时 "this"和 "super"之间的差异

c# - 将文本框绑定(bind)到列表框 SelectedItem

c++ - 继承和 AVL/BST 树

c# - 继承需要存储子类特定数据的数组的最佳方法是什么?

haskell - 为什么不在 Haskell 中进行类型检查?

java - 为什么 java 多态性在我的示例中不起作用

C++ 重载函数和子类