如何在C#中选择new和override?

suh*_*air 5 c#

建议在C#中使用覆盖而不是新的关键字.为什么这个规则?

Jon*_*eet 12

"新"意味着就CLR而言,你有两种完全不同的方法 - 它们碰巧具有相同的名称,但它们在继承方面是无关的.这意味着,如果你运行:

Base b = new Derived();
Derived d = new Derived();
b.MyMethod(); // Calls Base.MyMethod
d.MyMethod(); // Calls Derived.MyMethod
Run Code Online (Sandbox Code Playgroud)

这可能会产生一些非常难以理解的代码.

通常,如果您需要不同的方法,请将它们称为不同的东 使用相同名称(和签名)的正常原因是覆盖基类方法的行为.此时您没有任何选择,只能保持名称/签名相同.