为什么Object.ToString是一个虚方法?

时间:2009-08-11 17:44:44

标签: c# .net

如果它不是虚拟方法,只需正常编写ToString方法即可达到同样的效果,对吗?

您甚至可以使用可选的new关键字。

这不会有更好的表现吗?

3 个答案:

答案 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)

你可以问任何虚拟方法。

所以这个问题与询问“虚拟方法的目的是什么?”基本相同。