簡體   English   中英

為什么字符串類型具有.ToString()方法?

[英]Why does the string type have a .ToString() method?

為什么字符串數據類型具有.ToString()方法?

就像.NET中幾乎所有類型一樣,類型System.StringSystem.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM