2014-03-06 86 views
0

我剛剛通過官方msdn文檔的以下代碼。這看起來很簡單的代碼,但我不明白,當我們爲Person創建對象,並在tostring overrided method我們給一些值,現在不調用此函數只是一個對象傳遞給WriteLine,它會自動打印人的細節它是如何發生的,當你傳遞一個對象,任何對象,對Console.WriteLine的ToString()被調用有人請解釋一下..C#中覆蓋ToString()的工作#

using System; 
class Person 
{ 
    private string myName ="N/A"; 

    // Declare a Name property of type string: 
    public string Name 
    { 
     get 
     { 
      return myName; 
     } 
     set 
     { 
      myName = value; 
     } 
    } 
    public override string ToString() 
    { 
     return "Name = " + Name ; 
    } 

    public static void Main() 
    { 
     Person person = new Person(); 
     Console.WriteLine("Person details - {0}", person); 
     person.Name = "Joe"; 
     Console.WriteLine("Person details - {0}", person); 


    } 
} 

輸出

Person details - Name = N/A 
Person details - Name = Joe 
+1

有一個[真棒](http://referencesource.microsoft.com/#mscorlib/system/io/textwriter.cs#aedbc5e502007cf7)自己檢查出來。挖掘.NET源代碼從未如此簡單。 –

+0

所有的答案,這是真的可以理解:) – Sikander

+1

很高興我們可以幫助 – BradleyDotNET

回答

5

。當傳遞一個對象時,大多數控件都以這種方式工作。

基本上,UI並不知道如何顯示一個類,所以.NET提供了.ToString方法,因此它可以顯示。如果你不覆蓋它,注意默認給你的完全限定的名字和一些其他的垃圾。重寫使您可以使該功能有用。

+0

謝謝你它的明確:) – Sikander

2

現在不用調用這個函數只是一個對象傳遞給 的WriteLine,它會自動打印出人的細節是如何 它發生

See: Console.WriteLine

如果值沒有,只寫行結束符。 否則, ToString方法的值稱爲以產生其字符串 表示形式,並將結果字符串寫入標準 輸出流。

3

WriteLine方法內部調用傳遞給它的任何對象的ToString。

在您的示例中,第一行輸出缺省「n/a」,因爲您尚未爲對象指定名稱。第二行將名稱設置爲「Joe」後運行,它在內部覆蓋默認的「n/a」。因此,在同一個對象上再次調用ToString會返回名稱的新值。