[英]Why does the string type have a .ToString() method?
為什么字符串數據類型具有.ToString()
方法?
就像.NET中幾乎所有類型一樣,類型System.String
從System.Object
派生的。 Object
具有ToString()
方法,因此String
繼承了此方法。 它是一個虛擬方法,並且String
重寫它以返回對自身的引用,而不是使用默認的實現(即返回類型的名稱)。
從Reflector來看,這是Object
中ToString的實現:
public virtual string ToString()
{
return this.GetType().ToString();
}
這是String
的替代:
public override string ToString()
{
return this;
}
正如Mark所指出的,它只是返回對自身的引用。 但是,為什么這很重要? 所有基本類型都應返回其自身的字符串表示形式。 想象一下這樣的日志記錄功能:
public void Log(object o) {
Console.WriteLine(o.ToString());
}
這使您可以傳遞任何基本類型並記錄其內容。 如果沒有返回字符串本身,它將只打印出“字符串”而不是其內容。 您還可以使用模板功能執行相同的操作。
覺得這很傻嗎? 基本上,這就是字符串格式化功能的作用。 執行此操作時,它將調用“ ToString”:
Console.WriteLine("{0}", myString);
字符串是一個對象,它不是數據類型。 因為String是一個對象,所以它從Root對象繼承ToString()方法。
就像在Java,Objective-C或Scala中一樣:)
甚至對於Java來說都是如此,我認為大多數面向對象的編程語言都具有this,它是所討論對象的字符串表示形式,因為默認情況下,您創建的每個類都會從Object中刪除,因此會產生toString()方法,請記住,僅適用於不適用於前提類型的對象。
如果您的字符串為NULL,並且使用.ToString();,則將獲得Null引用異常。
將拋出以下內容:
string.Format("msgBoxTitle = {0}", msgBoxTitle.ToString())
最好只寫...這不會扔。
string.Format("msgBoxTitle = {0}", msgBoxTitle)
C#中的任何對象都具有to字符串方法,盡管我想不出為什么從對象類型繼承ToString()的那一刻就將字符串轉換為字符串的原因。的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.