如何在类中重写和格式化ToString()方法?

时间:2011-04-14 02:46:04

标签: c# .net override tostring

我搜索了Google和这个网站以找到答案。我也在课本中阅读过,但我仍然不明白它是如何应用的。

以下是我所知道的:

  • 它用于显示对象对自身的了解。

  • 它可用于格式化输出关于它自身的知识。

  • 必须在要使用的方法中重写。

4 个答案:

答案 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);
}