2012-03-12 16 views
0

タイプ制約があるabstractクラスがあります。しかし、私はまた、abstractクラスがインターフェイスを実装するようにしたい。宣言クラスで型制約と継承を指定する方法は?

例えば:コンパイルされません

public abstract class PostEvent<TPost> : IDomainEvent, where TPost : Post, new() 

私はこれをしたくない:

public abstract class PostEvent<TPost> where TPost : Post, IDomainEvent, new() 

をそれがTPost : IDomainEvent

を意味するので、私は構文は何PostEvent : IDomainEvent

したいですか?

+0

私は、現時点ではそれをテストするためのセットアップを持っていませんが、 'IDomainEvent'と'どこの間にコンマを削除してみてください:抽象メソッドパブリックAPIにオーティスをしたくない場合は、保護'。 – dasblinkenlight

答えて

3

これを試してみてください:

public abstract class PostEvent<TPost> : IDomainEvent where TPost : Post, new() 

あなたは、インターフェイスのリストと、一般的な制約の間にカンマを望んでいません。

1

あなたは(あなたが純粋に具体的な種類に実装を残すことができない - それはどこを開始するために理解する必要があります)、実際にそれを実装する必要があります。

public abstract class PostEvent<TPost> : IDomainEvent 
    where TPost : Post, new() 
{ 
    public abstract void SomeInterfaceMethod(); 
} 

ます。また、明示的なインターフェイスの実装を使用することができます

public abstract class PostEvent<TPost> : IDomainEvent 
    where TPost : Post, new() 
{ 
    protected abstract void SomeInterfaceMethod(); 
    void IDomainEvent.SomeInterfaceMethod() { 
     SomeInterfaceMethod(); // proxy to the protected abstract version 
    } 
} 
関連する問題