我有一个基类Sport
定义为:
public class Sport
{
public int Id {get; set;}
public string Name {get; set;}
public Sport() {}
public override string ToString()
{
string objectState = string.Format("[Id: {0}; Name: {1};]", Id, Name);
return objectState;
}
}
我有第二个类继承Sport
类:
public class Basketball : Sport
{
public string PointTerm {get; set;}
public Basketball() {}
//overriding ToString()??
}
如何使用附加属性ToString
覆盖基础Sport类中的PointTerm
?
答案 0 :(得分:3)
您只需在Basketball
课程中添加新的覆盖:
public override string ToString()
{
return string.Format("[Id: {0}; Name: {1}; PointTerm: {2};]",
Id, Name, PointTerm);
}
修改强>
如果你想与基类的实现保持同步,你可以做这样的事情,但是在大多数情况下上面的简单方法可能更好:
public override string ToString()
{
char[] openingBracket = new char[] { '[' };
char[] closingBracket = new char[] { ']' };
string trimmedBaseString = (base.ToString() ?? string.Empty)
.TrimStart(openingBracket).TrimEnd(closingBracket);
return string.Format("[{0} PointTerm: {1};]", trimmedBaseString, PointTerm);
}
答案 1 :(得分:0)
我不确定这是否适用于您的情况(或任何情况),但当然可以找到您的类型上定义的所有属性(无论是{{ 1}},Sport
或其他衍生类型)使用反射。
也许如果你在Basketball
课程中这样写:
Sport
然后public sealed override string ToString()
{
var allStrings = GetType().GetProperties()
.Select(p => p.Name + ": " + p.GetValue(this, null));
return "[" + string.Join("; ", allStrings) + ";]";
}
以及从中派生的所有类型都会以相同的方式定义Sport
,并且它将使用反射来查找所有(公共)属性。