C# 为什么我需要重写ToString?

C# 为什么我需要重写ToString?,c#,overriding,tostring,C#,Overriding,Tostring,我是c#编程的初学者,最近开始攻读学士学位。我想说的是,我是新来的 我已经标出了我遇到问题的地方。问题是我根本不明白为什么我需要在代码中加入覆盖 对象类型有两个变量(first和rest) //这是我不明白的“重写字符串到字符串”。为什么我需要覆盖这个 public override string ToString() { string output = "("; Pair p = this; while (p != null) { if (p.First() == n

我是c#编程的初学者,最近开始攻读学士学位。我想说的是,我是新来的

我已经标出了我遇到问题的地方。问题是我根本不明白为什么我需要在代码中加入覆盖

对象类型有两个变量(first和rest)

//这是我不明白的“重写字符串到字符串”。为什么我需要覆盖这个

 public override string ToString()
  {
    string output = "(";
Pair p = this;
while (p != null) {
      if (p.First() == null)
        output += "NULL";
      else
        output += p.First().ToString();
      if (p.Rest() is Pair)
    p = (Pair)(p.Rest());
      else {
    if (p.Rest() != null)
          output += " . " + rest.ToString();
    break;
  }
  output += " ";
}
    output += ")";
    return(output);
}

每当您有一个对象并且希望更改其表示为字符串的方式时,您都可以
重写
ToString
方法

这通常用于格式化选项,以便当您将项目打印到控制台时,您可以控制如何向查看项目的用户显示这些项目

例如,给定此类:

    class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }
    }
Person
类的实例打印到控制台将产生:
namespace+classname
,从可读性的角度来看,这并不理想

将类更改为:

    class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }

        public override string ToString()
        {
            return String.Format("Name: {0} Age: {1}.", this.Name, this.Age);
        }
    }
收益:
Name:。。。年龄:…
其中省略号表示提供的值。这比前面的场景更具可读性。

如果您的问题是“为什么重写
ToString
会有用”,npinti会给出答案


如果您的问题是“为什么我在
ToString
上使用
override
,而在其他方法上不使用”,那么答案是:因为
ToString
是在祖先类上定义的,而您正在定义的其他方法不是。如果您重写继承的方法而不使用
override
关键字对其进行标记,编译器会抱怨,这只是为了检查是否确实是您想要做的,或者您是否忘记了该方法存在于祖先中。

您不必重写它,但是它在很多情况下都很有用。类似于在
异常中
或在
调试时
。如果您使用
Console.WriteLine(新对())
它实际上会调用
ToString
方法每个对象都有一个ToString,图像您有一个名为Person的类,它有FirstName、Lastname等属性。有时最好重写ToString方法以返回say FirstName+“”+姓氏。不要使用默认的“NameSpace.Person”来编写您不理解的代码。可以保证您会自己发现重写ToString()的有用原因。相关帖子-您可能应该提到需要重写它的原因,因为它已经在对象类中实现了,所有其他对象都从中派生出来。@kyriacos_k:这个答案已经由
Amadan
处理了。现在c#6已经发布了。您可以使用
$“..”
格式化字符串!
    class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }

        public override string ToString()
        {
            return String.Format("Name: {0} Age: {1}.", this.Name, this.Age);
        }
    }