我搜索了Google和这个网站以找到答案。我也在课本中阅读过,但我仍然不明白它是如何应用的。
以下是我所知道的:
它用于显示对象对自身的了解。
它可用于格式化输出关于它自身的知识。
必须在要使用的方法中重写。
答案 0 :(得分:17)
认为你有一个类:
public class Person
{
public string FirstName { get; set;}
public string LastName { get; set;}
private string age;
}
使用此:
public override string ToString()
{
return string.Format("[First Name: {0}; Last Name: {1}; Age: {2}]", FirstName, LastName, age);
}
将揭示该课程的所有内部。实际上,它最好用于以预先格式化的方式快速检索类的公共字段(从而有效地将封装在类中的数据转换为字符串)。
此处还有 Pro C#2010和.NET 4平台一书中非常有用的建议:“您创建的许多类(和结构)都可以从覆盖ToString()中受益,以便返回类型当前状态的字符串文本表示。这对于调试(以及其他原因)非常有帮助。如何选择构造此字符串是个人选择的问题;但是,建议的方法是分隔每个名称/ value与分号对并将整个字符串包装在方括号内。但是,请始终记住,正确的ToString()覆盖还应该考虑在继承链上定义的任何数据。当您为扩展自定义的类重写ToString()时基类,业务的第一个顺序是使用base关键字从父级获取ToString()值。一旦获得父级的字符串数据,就可以附加派生类的自定义信息。“
答案 1 :(得分:2)
所有.NET类的基类都是object
类型。对象类为您提供了ToString()
的默认实现,默认情况下只打印出类的名称,除非该类重写了ToString()
方法以打印其他内容。该类的名称并不特别有用,因此在您编写的任何类中覆盖ToString()
通常是一种很好的做法,因为提供类的人类可读表示非常有用。默认情况下,当您要检查类的实例时,调试器将实际使用您的ToString()
实现。
在课堂上,您只需添加此方法:
public override string ToString()
{
// return a string that has something to do with your class
}
示例:
public class Person
{
public string FirstName {get;set;}
public string LastName {get;set;}
public int Age {get;set;}
public override void ToString()
{
// return whatever makes sense here...
return string.Format("[Person: FirstName={0}, LastName={1}, Age={2}]", FirstName, LastName, Age);
}
}
注意string.Format
方法只是创建字符串的一种方法。 string.Format的第一个参数是“格式”,它可以包含文字文本以及作为其他参数提供的值的占位符。上面的{0}
,{1}
和{2}
是在格式之后传递的FirstName,LastName和Age参数的占位符。如果你想了解更多,我会在string.Format上阅读。
答案 2 :(得分:1)
覆盖ToString()
方法:
public class Test
{
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
// Do your formatting here
return LastName + ", " + FirstName;
}
}
答案 3 :(得分:1)
您必须在类中重写ToString()。假设我有一个m_nDays类,m_nHours,m_nMinutes ...然后我可以覆盖ToString(),如下所示:
public override string ToString()
{
return string.Format("{0,5}d - {1:00}:{2:00}", m_nDays, m_nHours, m_nMinutes);
}