为什么字符串类型有一个.ToString()方法?

问题描述:

为什么字符串数据类型有一个.ToString()方法?为什么字符串类型有一个.ToString()方法?

类型System.String,像almost所有类型的.NET,从System.Object导出。 Object有一个ToString()方法,因此String继承此方法。这是一种虚拟方法,String将覆盖它以返回对自身的引用,而不是使用返回类型名称的默认实现。

从反射器,这是的ToString在Object实现:

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

而且这是在String倍率:

public override string ToString() 
{ 
    return this; 
} 
+0

出色答卷 – 2011-02-07 09:52:54

字符串是一个对象,它是不是一个数据类型。因为String是一个对象,所以它从ToString()方法的根对象继承。

这就像在Java中,Objective-C中或斯卡拉:)

+2

'int'有一个'ToString'方法,以及... – 2010-05-06 06:51:11

+0

它惊讶我:),我只是认为C#是像Java,对那些东西没有toString方法:) – vodkhang 2010-05-06 07:02:17

+0

它不是大写,因为它是别名。编译后,该别名将被转换为大写字符串 – vodkhang 2010-05-06 07:03:21

这是对Java甚至真的,我想大多数的面向对象的编程语言有这样的,有问题的对象的字符串表示,因为每个默认情况下它创建的类从Object中extedns,从而导致使用toString()方法,请记住它只适用于不是用于前缀类型的对象。

正如马克指出,这只是恢复到自身的引用。但是,为什么这很重要?所有基本类型都应返回自己的字符串表示形式。想象一下这样工作的日志记录功能:

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

这允许您传递任何基本类型并记录它的内容。如果没有字符串返回,它只会打印出“String”而不是它的内容。你也可以用模板函数做同样的事情。

认为这是愚蠢的?这基本上是字符串格式化函数的作用。当你做到这一点,它调用“的ToString”:

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

在C#中的任何对象有一个字符串的方法,但我想不出理由,为什么人会在此刻的ToString投一个字符串转换为字符串()从对象类型继承,这当然是一个字符串的例子。

你会得到一个空引用异常,如果你的字符串为NULL,并且使用的ToString();

下会抛出:

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

最好只写......这不会抛出。

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