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

C# 在控制基类时,是否存在应该使用new而不是override的情况?,c#,inheritance,polymorphism,C#,Inheritance,Polymorphism,当“new”有意义时,我遇到的示例涉及维护情况,其中子类从库中的基类继承,并且库的新版本添加了一个与子类中实现的方法同名的方法。(见:) 我想知道的是,在某些情况下,使用“新”是一个很好的设计选择(而不是在维护中可能需要的东西)。重写无法完成的一件事是更改方法/属性的返回类型,同时保持名称不变,但我怀疑这是否是一个好的设计选择 public class FruitBasket { public int Weight { get; set;} public List<Frui

当“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;}
}
公共类水果篮{
公共整数权重{get;set;}
公共列表{get;set;}
}
公共类AppleBasket:果篮{
公共新列表{get;set;}
}

我认为MSDN参考说明了
新的
关键字的正当性:
(). 例如,使用嵌套类的情况。

我知道的一种情况是,如果要将数据绑定到从另一个接口继承的接口,并且要绑定到基接口中的成员,则必须使用.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或代码属性。当然,您不必使用new,但建议使用new

除此之外,我只在维护模式下使用过它,也就是说,一旦某个应用已经发布,并且新的需求需要这样的更改

嗯,,
Dean.

没有回答你的问题-但是一篇关于一种用法的有趣帖子(参见Lippert先生的答案):因此,对另一个问题的回答详细说明了两种方法隐藏可能是一种好设计的场景。Eric Lippert的示例显然比我发布的代码干净得多,当你将AppleBasket存储在一个水果篮变量中时,这会带来各种有趣的事情。MSDN文档没有评论他们是否认为他们的场景是好的设计决策,只是可以做到:)同意。但本例中嵌套类的使用为如何使用它提供了一个有趣的指导,这反过来可以帮助您理解,在设计决策中受影响的不仅仅是方法。这是否也适用于派生类和/或WPF绑定?或者它非常特定于WinForms中的接口?我不知道WPF绑定,但是如果绑定到具体的类而不是接口,则不会出现问题。然而,如果绑定到具体的类,那么在使用mock进行测试时就会失去灵活性。