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;
   }
}

そして私はクラスを継承する2番目のクラスを持っています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

Sportたぶん、クラス内で次のように書くと:

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

次にSport、それから派生するすべての型ToStringが同じ方法で定義され、リフレクションを使用してすべての (パブリック) プロパティを検索します。

于 2012-10-22T22:32:15.720 に答える