C#:为什么stringtypes有一个.ToString()方法

C#:为什么string数据types有一个.ToString()方法?

像.NET中的几乎所有types一样, System.Stringtypes派生自System.ObjectObject有一个ToString()方法,所以Stringinheritance这个方法。 这是一个虚拟的方法, String重载它返回一个对自己的引用,而不是使用返回types名称的默认实现。

从reflection器,这是Object的ToString的实现:

 public virtual string ToString() { return this.GetType().ToString(); } 

这是String重写:

 public override string ToString() { return this; } 

正如Mark指出的那样,它只是返回一个对自身的引用。 但是,为什么这很重要? 所有基本types都应返回自己的string表示forms。 想象一下这样工作的日志loggingfunction:

 public void Log(object o) { Console.WriteLine(o.ToString()); } 

这允许您传递任何基本types并logging它的内容。 没有string返回它自己,它只会打印出“string”,而不是它的内容。 你也可以用模板函数做同样的事情。

觉得这很愚蠢? 这基本上是string格式化函数的作用。 当你这样做的时候它会调用“ToString”

 Console.WriteLine("{0}", myString); 

string是一个对象,它不是一个数据types。 因为String是一个对象,它从ToString()方法inheritance了Root Object。

就像在Java中,Objective-C或Scala 🙂

这对于java来说甚至是正确的,我认为大多数的面向对象的编程语言都有这个问题的对象的string表示forms,因为默认情况下你创build的每个类都是从Object中移出的,因此产生了toString()方法,记住它只适用于不适用于premitivetypes的对象。

在C#中的任何对象都有一个string方法,尽pipe我不能想到为什么在ToString()从对象typesinheritance的时候将string转换为string的原因,这当然是一个string的。

如果你的string是NULL并且你使用.ToString(),你会得到一个空引用exception。

以下将抛出:

 string.Format("msgBoxTitle = {0}", msgBoxTitle.ToString()) 

最好只写…这不会抛出。

 string.Format("msgBoxTitle = {0}", msgBoxTitle)