为什么我需要覆盖ToString?

时间:2015-10-16 09:27:27

标签: c# override tostring

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

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

类型对象有2个var(第一个和其余的)。

public Pair()
  {
    first = rest = null;
  }

public Pair(Object o)
  {
    first = o;
    rest = null;
  }

public Object First()
  {
    return(first);
  }
public Object Rest()
  {
    return(rest);
  }

public Pair Connect(Object o)
  {
    rest = o;
    return(this);
  }

//这是"覆盖字符串ToString"我不明白。为什么我需要覆盖它?

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

2 个答案:

答案 0 :(得分:1)

只要有对象,就可以override 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: ... Age: ...其中省略号表示提供的值。这比前一个场景更具可读性。

答案 1 :(得分:0)

如果你的问题是"为什么要覆盖ToString有用",npinti有答案。

如果您的问题是"为什么我在override上使用ToString但在其他方法"上却没有,那么答案是:因为ToString是在祖先类,以及你定义的其他方法都不是。如果你覆盖一个继承的方法而没有使用override关键字标记它,编译器会抱怨,只是作为一个完整性检查,看看这是否真的是你想要做的,或者你忘了这个方法存在在祖先。