我是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);
}
答案 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
关键字标记它,编译器会抱怨,只是作为一个完整性检查,看看这是否真的是你想要做的,或者你忘了这个方法存在在祖先。