在 .NET 世界裡,System.Object.ToString() 是最常被呼叫的方法之一。身為類別設計者,你應該為所有使用者提供一個「通情達理」的類別——亦即對使用者友善。否則,你就強迫使用者自行拼湊屬性並加上易讀的說明。這個以字串形式存在的類別說明,能輕易地在 Windows Forms、Web Forms、主控台輸出等場合顯示物件資訊,也極利於除錯。你所設計的任何型別,都應合理地覆寫此方法;當設計更複雜的型別時,更應實作功能更強的 IFormattable.ToString()。承認吧:若你不覆寫這個慣用方法,或寫得很爛,使用者將不得不幫你修補。
System.Object 版的 ToString() 僅回傳型別名稱(如 "Rect"、"Point"、"Size"),完全無法如你所願地呈現給使用者。但這只是你未覆寫時的結果。你只需為類別寫一次,使用者卻會呼叫無數次。設計類別時多花一點心力,每次使用都能獲得回報。
考慮一個簡單的 Customer 類別,包含三個欄位:
public class Customer
{
private string _name;
private decimal _revenue;
private string _contactPhone;
}
預設繼承的 ToString() 回傳 "Customer",毫無助益。即使僅供除錯使用,也應更靈活。覆寫後應回傳使用者視角的文字說明,對於 Customer 而言,應是名稱:
public override string ToString()
{
return _name;
}
一般不會在 ToString() 提供過多說明,給一個名稱通常已足夠,再搭配 SDK 文件。更多時候,在類別名稱後附加重要屬性說明。曾在第三方程式庫見過嚴謹的結構:類別名之後,附加關鍵內容與重要屬性。