代码之家  ›  专栏  ›  技术社区  ›  suhair

如何在C#中选择新建和覆盖?

c#
  •  5
  • suhair  · 技术社区  · 17 年前

    建议在C#中使用覆盖而不是新关键字。为什么会这样?

    3 回复  |  直到 17 年前
        1
  •  12
  •   Jon Skeet    17 年前

    “new”意味着就CLR而言,您有两个完全不同的方法——它们碰巧有相同的名称,但它们在继承方面是不相关的。这意味着,如果您运行:

    Base b = new Derived();
    Derived d = new Derived();
    b.MyMethod(); // Calls Base.MyMethod
    d.MyMethod(); // Calls Derived.MyMethod
    

    这可能会导致一些非常难以理解的代码。

    通常,如果你想要不同的方法,就称它们为不同的东西。使用相同名称(和签名)的正常原因是重写基类方法的行为。此时,你别无选择,只能保持姓名/签名不变。

        2
  •  3
  •   Quibblesome    17 年前

        3
  •  0
  •   Thomas Hansen    17 年前

    这实际上是 不 选择 你有。无论基类是如何创建的,这都是强加给您的。如果存在一个同名的方法,并且它被标记为“virtual”,那么您应该使用override,除非您希望在人们开始将您的类的对象强制转换到基类时出现一些非常有趣的错误。。。

    你的新 方法

    所以比较它们就像比较汽车,呃。。。 或者别的什么。。。