为什么字符串数据类型有.ToString()
方法?
答案 0 :(得分:68)
System.String
类型,如almost中的所有类型,都来自System.Object
。 Object
有一个ToString()
方法,因此String
会继承此方法。它是一个虚方法,String
会覆盖它以返回对自身的引用,而不是使用返回类型名称的默认实现。
从Reflector,这是Object
中的ToString的实现:
public virtual string ToString()
{
return this.GetType().ToString();
}
这是String
中的覆盖:
public override string ToString()
{
return this;
}
答案 1 :(得分:9)
正如马克指出的那样,它只是返回对自身的引用。但是,为什么这很重要?所有基本类型都应返回自己的字符串表示形式。想象一下这样工作的记录功能:
public void Log(object o) {
Console.WriteLine(o.ToString());
}
这允许您传递任何基本类型并记录其内容。没有字符串返回本身,它只会打印出“字符串”而不是它的内容。您也可以使用模板功能执行相同的操作。
认为这很傻?这基本上是字符串格式化功能的作用。执行此操作时,它会调用“ToString”:Console.WriteLine("{0}", myString);
答案 2 :(得分:2)
String是一个对象,它不是数据类型。因为String是一个对象,所以它从Root Object继承了ToString()方法。
就像在Java,Objective-C或Scala中一样:)
答案 3 :(得分:2)
对于java来说甚至都是这样,我认为大多数面向对象的编程语言都有这个,这是对象的字符串表示,因为默认情况下你创建的每个类都是从Object中派生出来的,因此得到了toString()方法,请记住它仅适用于不属于预制类型的物体。
答案 4 :(得分:1)
如果您的字符串为NULL并使用.ToString();
,您将获得Null引用异常以下将抛出:
string.Format("msgBoxTitle = {0}", msgBoxTitle.ToString())
最好只写...这不会抛出。
string.Format("msgBoxTitle = {0}", msgBoxTitle)
答案 5 :(得分:0)
C#中的任何对象都有一个to string方法,虽然我无法想到为什么在从对象类型继承ToString()时将字符串强制转换为字符串的原因,当然这是一个字符串是一个例子。