C# 为什么我需要重写ToString?
我是c#编程的初学者,最近开始攻读学士学位。我想说的是,我是新来的 我已经标出了我遇到问题的地方。问题是我根本不明白为什么我需要在代码中加入覆盖 对象类型有两个变量(first和rest) //这是我不明白的“重写字符串到字符串”。为什么我需要覆盖这个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
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);
}
}