2017-09-22 20 views
0

ように私は、次のインタフェースとクラスを持っている:C#ジェネリック型パラメータ

public abstract class A {} 
public abstract class B<T> : IType<T> 
{ 
    public T Value { get; set; } 
} 

public interface IType<T> 
{ 
    T Value { get; set; } 
} 

public class C : B<String>, IType<String> { } 
public class D : B<Int32>, IType<Int32> { } 

にはどうすれAを使用せずに、メソッドのパラメータとしてCまたはDを渡すことができますか? したがって、パラメータタイプはIType<T>またはB<T>である必要があります。

残念ながら、私はジェネリックスに完全に新しくなっているので、どんな助けでも感謝しています。ありがとう!

EDIT

私は何を達成しようとしているが、私はそのメソッドにCまたはDを渡すことができるように、以下の(コンパイルされません)

public void SetB(B<T> Type) 
{ 
    //Do stuff... 
} 

のようなものです。

+0

あなたは現在コンパイルしていないものなので、あなたがしようとしていることを理解することは本当に難しいです。コードをコンパイルするために質問を更新して、何をしようとしているかを説明する素早い擬似コードスニペットを追加できますか? 'ITYPE '、という "' B 'や' ITYPE '" 'B 'があるので、 –

+0

があることと等価である '' ITYPEので、単にあなたのパラメータの型として 'ITYPE を'使用すると間違って何ですか? – fuglede

+0

@DavidLありがとう、私の質問を更新 – Nordrassil

答えて

1

あなたの方法はgenericでもかまいません。

public void MyMethod<T>(IType<T> arg) 
{ 
    throw new NotImplementedException(); 
} 

このように呼び出すことができます。

MyMethod(new C()); 
MyMethod(new D()); 
+0

ありがとう! – Nordrassil

+0

@Nordrassil: 'MyMethod (new C())'も呼び出すことができることに注意してください。ジェネリック型の引数を省略することができます。コンパイラは、引数の意味を理解しようとしますが、必ずしも成功するとは限りません。 –

+0

@EricLippert役に立つヒントありがとう! – Nordrassil

関連する問題