在編寫自定義類型的時候,即使我們不寫ToString函數,系統也會自動提供ToString函數,例如:
public class clsUserInfo
{
private string strUserName;
……
}
不過系統所提供ToString函數,並不做太多的事情,無法真實的反映當前對象的一些屬性,就如上這段代碼,調用ToString返回的結果和GetType後轉換成String是一樣的。那麼這樣的返回值對於調用者來說沒有太多的意義。
爲了能提供一個有意義的ToString函數,則需要重載ToString函數來實現一個面向此對象的ToString函數。舉例說明,對於上面clsUserInfo這個類型,如下這種寫法會使ToString函數更有意義。
public class clsUserInfo
{
private string strUserName;
……
public override string ToString()
{
return string.Format( "User name:{0}", strUserName );
}
}
提供一個有意義的ToString函數,對於進行調試或者發佈此類都是很有用,因爲這種做法是最簡便的方法,相對於訪問類的成員屬性然後再組合字符串。不過大家寫代碼的時候,包括我在內,往往忽略了去提供一個有意義的ToString函數,這點看來要在今後的編碼中進行改善。
除了重載系統提供的ToString函數外,在C#中還可以繼承IFormattable接口,來提供更復雜的ToString函數,至於這方面,我不想多說,因爲繼承了接口,提供的ToString函數會有很多變化,這也許只有到真正的應用當中才能更深刻的體會到。