2016-03-21 22 views
1

抽象クラスのインタフェースを作成する実践的な理由はありますか? 抽象クラス用のインタフェースを作成する必要がありますか?

public interface IEntity<T> 
{ 
    T Id { get; set; } 
} 

public abstract class BaseEntity { 
} 

public abstract class Entity<T> : BaseEntity, IEntity<T> 
{ 
    public virtual T Id { get; set; } 
} 

とIEntity iが複数回使用しwhouldものではありませんので、私は本当に、そのと、このコードの違いは何であるか理解していない:私はそのようなことに遭遇しました

public abstract class BaseEntity { 
} 

public abstract class Entity<T> : BaseEntity 
{ 
    public virtual T Id { get; set; } 
} 

感謝!

+0

あなたは何を達成しようとしていますか?あなたの目標は何ですか?なぜこれを行うことであなたの問題を解決し始めましたか?何が良いアイデアであり、何が解決しようとしているのかを知らずに何ができないのかは分かりません。 – kai

+0

http://stackoverflow.com/questions/14091837/c-sharp-abstract-class-implementing-an-interface、http://programmers.stackexchange.com/questions/163641/interfaces-on-an-abstract-class 、検索を試みてください。 – CodeCaster

+0

マイクロソフトからのいくつかの指針:https://msdn.microsoft.com/en-us/library/scsyfw1d%28v=vs.71%29.aspx –

答えて

0

BaseEntityクラスはメソッドのプロパティを実際に追加します。はい、インターフェイスとはまったく異なります。インターフェイスはIdタイプTを定義し、そのインターフェイス(契約)はアプリケーションの他の場所でも使用できます。

今のところ基本クラスは、役に立たないIMHOです。

あなたのためのインタフェースを実装し、基本クラスは、このように、使用可能になるものです。ここで

public interface IEntity<T> { 
    T Id { get; set; } 
} 

public abstract class BaseEntity<T>: IEntity<T> { 
    public virtual T Id { get; set; } 
} 

public abstract class Entity<T> : BaseEntity<T> { 
    // No need to implement the Id property, we already have it inherited 
} 
関連する問題