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

本文关键字:ToString 格式化 方法 重写 | 更新日期: 2023-09-27 17:50:20

我搜索了谷歌和这个网站来寻找答案。我也在我的课本上读过它,但我仍然不明白它是如何应用的。

以下是我所知道的:

  • 显示对象对自身的了解

  • 它可以用来格式化它所知道的关于它自己的输出

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

假设你有这样一个类:

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

将显示类的所有内部信息。实际上,它最适合用于以预格式化的方式快速检索类的公共字段(从而有效地将封装在类中的数据转换为字符串)。

还有一个非常有用的建议,来自于《strong>Pro c# 2010和。net 4平台》:"你创建的许多类(和结构)可以从重写ToString()中受益,以便返回类型当前状态的字符串文本表示。这对于调试(以及其他原因)非常有帮助。如何构造这个字符串是个人选择的问题;但是,推荐的方法是用分号分隔每个名称/值对,并将整个字符串包装在方括号内。但是,请始终记住,正确的ToString()重写还应该考虑继承链上定义的任何数据。当您为扩展自定义基类的类重写ToString()时,首先要做的是使用base关键字从父类获取ToString()值。一旦获得父类的字符串数据,就可以附加派生类的自定义信息。"

所有。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参数的占位符。我会仔细研读弦乐。

覆盖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;
   }
}

您必须在类中重写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);
}