【问题标题】:How is the ToString() method overridden and formatted within a class?ToString() 方法是如何在一个类中被覆盖和格式化的?
【发布时间】:2011-04-14 02:46:04
【问题描述】:

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

这是我所知道的:

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

  • 它可以用来格式化输出它对自己的了解。

  • 它已在要使用的方法中被覆盖。

【问题讨论】:

  • 我不太清楚你在这里问什么?
  • @Kyle 我想我想学习如何应用 toString,可能以与我的书不同的方式。我缺少一些东西,我希望其中一个答案会有所帮助。

标签: c# .net overriding tostring


【解决方案1】:

认为您有这样的课程:

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 and the .NET 4 Platform一书的非常有用的建议:“您创建的许多类(和结构)可以从覆盖 ToString() 中受益,以便返回类型当前状态的字符串文本表示。这对于调试目的非常有帮助(以及其他原因)。如何选择构造此字符串是个人选择的问题;但是,推荐的方法是将每个名称分开/value 对,用分号将整个字符串括在方括号中。但是,请始终记住,适当的 ToString() 覆盖还应考虑到继承链上定义的任何数据。当您为扩展自定义的类覆盖 ToString() 时基类,首先要做的就是使用base关键字从父类获取ToString()值。获取父类的字符串数据后,可以追加派生类的自定义信息。"

【讨论】:

  • 好的。 string.Format 部分从何而来?
  • 除了上面显示的内容之外,我喜欢覆盖 ToString() 的原因之一是出于调试目的。当您在调试模式下运行并悬停在对象上或观察对象等时,它使用 ToString() 来格式化显示的内容。
  • @Teoman,您已添加到您的答案中,抱歉重复。
  • string.Format 只是创建一个字符串,您可以使用它来显示类数据的当前值。 ToString 将使用此字符串和当前值来显示对象的字符串表示形式。
  • string.Format 实际上是 System.String.Format() 静态类的快捷方式/别名,其中字符串中的 {0}、{1} 等被给定变量替换。你可以在这里阅读它(非常有用的方法):msdn.microsoft.com/en-us/library/system.string.format.aspx
【解决方案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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2015-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 2012-01-11
        • 2013-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多