假設我有以下幾點:
public String whatHappens{ get; set; }
假設屬性已初始化和設置。
然後到這裏我打電話
Console.WriteLine(whatHappens);
是否GET調用返回一個字符串對象和Console.WriteLine命令調用toString() OR 是否又將GET調用調用內的ToString()方法字符串類並返回一個字符串。
這不是一個學校的問題,這是我的同事和我有的論點。
假設我有以下幾點:
public String whatHappens{ get; set; }
假設屬性已初始化和設置。
然後到這裏我打電話
Console.WriteLine(whatHappens);
是否GET調用返回一個字符串對象和Console.WriteLine命令調用toString() OR 是否又將GET調用調用內的ToString()方法字符串類並返回一個字符串。
這不是一個學校的問題,這是我的同事和我有的論點。
在你的例子中你使用了一個自動屬性。自動屬性具有額外的隱藏字段,即後臺字段。這個字段與屬性的類型相同,在你的情況下是一個字符串。
此屬性內的代碼將不會調用ToString()
,因爲後臺字段已經是string
類型。
Console.WriteLine
有許多過載。其中一個重載接受string
類型的參數。因此在Console.WriteLine
之內,不需要調用ToString()
,因爲該參數已經是該類型的。
總之:沒有ToString()
將被稱爲任何地方。
另一方面,如果該屬性不是自動屬性,並且該屬性背後的字段是另一種類型,則需要使用ToString()
將其轉換爲字符串。
如果,另一方面,Console.WriteLine
另一個重載叫,其中參數是object
型,比WriteLine
有在某些時候調用ToString()
。
您的倒數第二個「段落」中的措詞使它聽起來像'ToString()'從不需要自動屬性。在類型不是'String'的任何情況下,都會調用ToString()。 – Cemafor 2013-05-01 19:10:30
@Cemafor:任何自動屬性都不會調用任何轉換方法,因爲後臺字段總是與屬性相同。爲什麼要轉換數據,如果他們是相同類型的。這隻會消耗性能。 – 2013-05-01 19:13:19
我的意思是在調用'Console.WriteLine(whatHappens);'的情況下,我想這是調用'ToString()'的問題出現的地方。 – Cemafor 2013-05-01 19:15:57
屬性getter返回對字符串對象的引用,並調用接受字符串的Console.WriteLine()的重載,並且根本不調用「ToString()」。 (請注意,編譯器會爲該類生成一個隱藏的字符串字段,以實現一個自動字符串屬性,例如您指定的字符串屬性,並且它是對從該getter返回的該隱藏字符串字段的引用。) – 2013-05-01 18:56:23
您還沒有到'.ToString()'''字符串';它已經是一個'字符串'了。 – JosephHirn 2013-05-01 18:59:19