1原因
类型的字符串表示非常有用,可以在很多地方向用户显示对象的有关信息,例如在windows forms上、web forms上、控制台输出窗口中,以及调试环境中。为此,我们创建的每一个类型都因该重写Object类的ToString()方法。
2举例
public class Customer
{
private string _name;
private decimal _revenue;
private string _contactPhone;
}
如果不提供重写的版本,Customer将继承Object类的ToString()方法,也就是返回一个“Customer”字符串。这个字符串实在没有什么用处。即使ToString()方法只应用于调试的目的,我们也应该返回一个有意义的描述。我们重写的时候应该尽量考虑用户的所希望的表示。就上面这个类型来说,返回_name是一个不错的选择:
public override string ToString()
{
return _name;
}
在我们为Customer类重写了ToString()方法之后,该类的对象将可以更容易的添加到Windows Froms控件、Web Forms控件或者控制台上。
3总结
重写Object.ToString()是为类提供字符串表示的最简单方式。每当我们创建一个类型时,都要提供该方法。它应该是我们的类型最明显、最常用的一种表示。只有在一些比较少的情况下,当我们期望为类型提供更复杂的输出格式是,才应该实现IFormattable接口。它为“类型的用户定制类型的字符串输出”提供了一种标准的方式。如果我们没有做这些工作,用户就要自己来实现自定义的格式化器。那样的做法需要更多得代码,因为用户处于类外,无法访问对象的内部状态。