C#:为什么stringtypes有一个.ToString()方法
C#:为什么string数据types有一个.ToString()
方法?
像.NET中的几乎所有types一样, System.String
types派生自System.Object
。 Object
有一个ToString()
方法,所以String
inheritance这个方法。 这是一个虚拟的方法, 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)