我想在我的一个类中重新定义 ToString() 函数。
我写了
public string ToString()
... 一切正常。但是 ReSharper 告诉我将其更改为
public new string ToString()
或
public override string ToString()
有什么区别?为什么 C# 需要这样的东西?
最佳答案
如果您使用 public string ToString()
,则不清楚您打算做什么。如果你想通过多态性改变 ToString
的行为,那么 override
。您可以添加一个new ToString()
,但这很愚蠢。不要那样做!
区别在于当你这样做时会发生什么:
MyType t = new MyType();
object o = t;
Console.WriteLine(t.ToString());
Console.WriteLine(o.ToString());
如果您覆盖
,两者都将输出您的新版本。如果您new
,只有第一个会使用您的新版本;第二个将使用原始实现。
我不认为我曾经见过有人在ToString()
上使用方法隐藏(又名new
)。
关于C#:public new string ToString() VS public override string ToString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014853/