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

标签 c# oop

我想在我的一个类中重新定义 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/

相关文章:

c# - 在 Windows 商店应用程序中下载文件

php - 在 OOP PHP 中重构代码并使用 PDO 进行 mysql 查询

javascript - 仅当 Javascript 中存在类时才允许监听器事件运行

php - 静态对象中的魔术方法

c++ - 如何在 C++ 中为 PacMan 编写 map

c# - 扩展 Asp.Net Identity IsInRole() 方法

c# - 解析 JSON 字符串而不被结构或类卡住的最佳方法

c# - 结合字符串插值和 string.format

c# - 如何在 dbml 中标记为可序列化?

php - Java 中是否有 `public static main(String[] args)` 的 PHP 等价物?