C#:public new string ToString()VS public override string ToString()

mar*_*cgg 20 c# oop

我想在我的一个类中重新定义ToString()函数.

我写

public string ToString()
Run Code Online (Sandbox Code Playgroud)

......而且工作正常.但ReSharper告诉我要改变它

public new string ToString() 
Run Code Online (Sandbox Code Playgroud)

要么

public override string ToString()
Run Code Online (Sandbox Code Playgroud)

有什么不同?为什么C#需要这样的东西?

Mar*_*ell 35

如果使用public string ToString()它,目前还不清楚你打算做什么.如果你的意思是改变ToStringvia多态的行为,那么override.你可以添加一个new ToString(),但这将是愚蠢的.不要那样做!

不同之处是当你这样做时会发生什么:

MyType t = new MyType();
object o = t;
Console.WriteLine(t.ToString());
Console.WriteLine(o.ToString());
Run Code Online (Sandbox Code Playgroud)

如果您override,两者都将输出您的新版本.如果你new,只有第一个会使用你的新版本; 第二个将使用原始实现.

我不认为我曾经见过任何人使用方法隐藏(又名new)ToString().

  • 哇 - 为什么地球上会有人贬低这个? (3认同)

Jar*_*Par 9

问题是ToString是一个虚方法.要覆盖C#中的虚方法,您需要指定override关键字.

你几乎肯定不想要"新"版本..