C# 为什么Object.ToString是虚拟方法?

C# 为什么Object.ToString是虚拟方法?,c#,.net,C#,.net,如果它不是一个虚拟方法,那么您仍然可以通过正常编写ToString方法来实现相同的效果,对吗 您甚至可以使用可选的new关键字 这不是有更好的性能吗 如果它不是一个虚拟方法,你仍然可以达到同样的效果,只需像平常一样编写你的ToString方法,对吗 不考虑例如一个控制台过载的签名.WrnLead函数: void Console.WriteLine(object o); 如果ToString是novirtual,则始终调用System.Object.ToString实现,而不是传递给函数的实际对

如果它不是一个虚拟方法,那么您仍然可以通过正常编写ToString方法来实现相同的效果,对吗

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

这不是有更好的性能吗

如果它不是一个虚拟方法,你仍然可以达到同样的效果,只需像平常一样编写你的ToString方法,对吗

不考虑例如一个控制台过载的签名.WrnLead函数:

void Console.WriteLine(object o);

如果ToString是novirtual,则始终调用System.Object.ToString实现,而不是传递给函数的实际对象上的实现。

按照Konrad的注释:

public Class A
{
    public new string ToString()
    {
        return "Hello from A";
    }
}

object a = new A();
a.ToString();

不会返回“Hello from A”,而是返回类型名称,这是对象的实现所做的。

您可以对任何虚拟方法提出相同的要求


所以这个问题基本上和问虚拟方法的目的是什么一样的?

不,它不会。请参阅有关多态性的教程。如果它是C++模板,它就可以工作。但对于C或Java泛型,参数必须实现一个接口,这将涉及动态调度,就像虚拟方法一样。但它需要对T进行一些约束。同样的问题变得更复杂。为什么不花30秒编写一个控制台应用程序呢?改编一句德国谚语:“如果我们有奶酪,我们就可以享用奶酪三明治——如果我们有面包”,对吗?;-为什么这个问题被否决了?不是我的否决票,但当有人搜索ToString或虚拟方法时,这个问题不应该在列表的顶部