2009-06-11 4 views
4

私のクラスのジェネリックタイプがインターフェースを実装することを指定する必要があり、リファレンスタイプでもあります。私は下の両方のコードスニペットを試みたが、どちらも仕事複数のジェネリックタイプ

public abstract class MyClass<TMyType> 
    where TMyType : IMyInterface 
    where TMyType : class 

public abstract class MyClass<TMyType> 
     where TMyType : class, IMyInterface 

は私がタイプに対して複数のwhere句を指定することができないよ、これを実行することが可能ですか?

答えて

7

後者の構文はうまくいくはずです(私のためにコンパイルする必要があります)。 同じタイプのパラメーターに2つの制約を指定しようとしているため、異なるタイプのパラメーターではなく、最初のパラメーターが機能しません。

あなたにはうまくいかない、後者の構文の短い例を挙げてください。これは私のために働く:

public interface IFoo {} 

public abstract class MyClass<T> 
    where T : class, IFoo 
{ 
} 
+0

[OK]を、おかげで自分の制約を持つ複数のジェネリック医薬品各

public interface IFoo {} public abstract class MyClass<T> where T : class, IFoo { } 

ケース2を。あなたは正しい、2番目のスニペットは動作します。申し訳ありません - 私が得たコンパイルエラーは、私が試したときにこれと無関係なものでした。それを正しく読んでください! – Charlie

5

複数のwhere節を複写として定義する方法に関する質問。その質問が本当に完全な回答と重複している場合は、両方の場合が含まれている必要があります。

ケース1 - シングルジェネリックは、複数の制約があります: - :

public interface IFoo1 {} 
public interface IFoo2 {} 

public abstract class MyClass<T1, T2> 
    where T1 : class, IFoo1 
    where T2 : IFoo2 
{ 
} 
関連する問題