如果它不是虚拟方法,只需正常编写ToString
方法即可达到同样的效果,对吗?
您甚至可以使用可选的new
关键字。
这不会有更好的表现吗?
答案 0 :(得分:14)
如果它不是虚方法,你仍然可以通过正常编写ToString方法来实现相同的效果,对吗?
没有。考虑(例如)Console.WriteLine
函数的一个重载的签名:
void Console.WriteLine(object o);
如果ToString
是非虚拟的,那么这将始终调用System.Object.ToString
实现,而不是传递给函数的实际对象上的实现。
答案 1 :(得分:4)
按照康拉德的评论:
public Class A
{
public new string ToString()
{
return "Hello from A";
}
}
object a = new A();
a.ToString();
不会返回'来自A的Hello',而是返回类型名称(这是对象的实现)。
答案 2 :(得分:4)
你可以问任何虚拟方法。
所以这个问题与询问“虚拟方法的目的是什么?”基本相同。