0

我有一个基类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

4

2 回答 2

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);
}
于 2012-10-22T19:32:31.420 回答
0

我不确定这对于您的情况(或在任何情况下)是否是一个好的解决方案,但当然可以使用反射找到在您的类型(无论是 还是其他派生类型)上定义的Sport所有Basketball属性。

Maybe if you write like this inside your Sport class:

public sealed override string ToString()
{
    var allStrings = GetType().GetProperties()
        .Select(p => p.Name + ": " + p.GetValue(this, null));
    return "[" + string.Join("; ", allStrings) + ";]";
}

Then Sport and all types deriving from it will have ToString defined the same way, and it will use reflection to find all (public) properties.

于 2012-10-22T22:32:15.720 回答