【问题标题】:Why do I need to override ToString?为什么我需要重写 ToString?
【发布时间】:2015-10-16 09:27:27
【问题描述】:

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

【问题讨论】:

  • 您不必重写它,但它在很多情况下都很有用。就像在Exceptions 或当你debug 一样。如果你这样做 Console.WriteLine(new Pair()); 它实际上会调用 ToString 方法
  • 每个对象都有一个 ToString,图像你有一个名为 Person 的类,它具有 FirstName、Lastname 等属性。有时最好覆盖 ToString 方法以返回 FirstName + " " + Surname。而不是默认的“NameSpace.Person”
  • 永远不要写你不懂的代码。保证你自己会发现为什么重写 ToString() 是有用的。

标签: c# overriding tostring


【解决方案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: ... 其中省略号表示提供的值。这比之前的场景更具可读性。

【讨论】:

  • 您可能应该提到需要覆盖它的原因是因为它已经在 Object 类中实现,所有其他对象都从该类派生。
  • @kyriacos_k:Amadan 已经处理了这个答案。
  • 现在 c# 6 已经发布了。您可以使用$"..." 格式化字符串!
【解决方案2】:

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

如果您的问题是“为什么我在ToString 上使用override 而不是在其他方法上”,那么答案是:因为ToString 是在祖先类上定义的,而您定义的其他方法是不。如果你重写一个继承的方法而不用override 关键字标记它,编译器会报错,就像一个健全的检查,看看这是否真的是你想要做的,或者你忘记了这个方法存在于祖先中。

【讨论】:

    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2013-12-17
    相关资源
    最近更新 更多