0

すべてのスポーツに共通するすべてのプロパティと動作を1か所に集めたいとしましょう。この目的のためにSportBaseを抽象クラスとして使用することを考えていましたが、よくわかりません。この例では、抽象とインターフェイスの使用法の違いを理解しようとしています。

すべてのスポーツには次の特性が必要です

  • DateTime Started;
  • DateTime Ended;
  • 文字列名;

これらのプロパティを整数のように宣言し、後でGameStartGameのように分離されたエンティティとしてGameオブジェクトを使用することにした場合はどうなりますか。後の変更での苦痛を軽減するために、高レベルの抽象化でどのアプローチを使用するかが明確にわかりません(この変更により、新しいプロパティや新しい動作などが追加される可能性があります)

ありがとう

4

4 に答える 4

3

プロパティと空のメソッドしかない場合は、インターフェースの方が適している可能性があります。実際のコードがある場合は、抽象クラスが唯一のオプションです。また、継承できる抽象クラスは 1 つだけですが、複数のインターフェイスを実装できることにも注意してください。

于 2012-11-21T21:34:16.303 に答える
2

いいえ、私はそれをしません。最終的には、多くの責任を負う抽象的な神クラスを作成することになります。

于 2012-11-21T21:36:39.050 に答える
2

インターフェイスを使用して、コーディングするコントラクトを提供できます。

public interface ISportsEvent
{
    DateTime Start { get; set; }
    DateTime End { get; set; }
    string Name { get; set; }
}

しかし、それは再利用可能な実装を提供しません

原則として、継承よりも構成を優先する必要があります。

したがって、多くの場合、このようなことを行う方が良いです

public interface EventDetails
{
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public string Name { get; set; }
}


public class SportingEvent
{

    public EventDetails Details {get;set;}
}

これは少し大雑把ですが、私が何を目指しているかを見ることができます。

于 2012-11-21T21:40:52.283 に答える
1

スポーツはいくつかのフィールドを共有するだけでなく、いくつかのロジックも共有する可能性があるため、個人的にはおそらく抽象クラスにするでしょう。

インターフェイスは重複するコードを分離するためのものではありませんが、純粋にポリモーフィズムのためのものです。

インターフェイスが行うことは、クラスが特定の方法で動作することを保証することだけです。抽象クラスが必要な場合よりも、基本クラスにロジックを配置する予定がある場合。

于 2012-11-21T21:37:17.110 に答える