もし私が間違っているなら、それはタイプT
のデフォルトであるかのように 'T:baseClass'をbaseClass
にしていますか?
、これは当てはまらないもしそうであれば、専門where T : baseClass
は(それが代わりにクラスのインターフェイスであった場合、または実装)タイプT
がbaseClass
又はbaseClass
由来するなければならないことを意味します。したがって
、あなたが持っていた場合:
public class GenericClass<T> where T : baseClass
{
}
を次にあなたが言うことができます。
var x = new GenericClass<baseClass>();
それとも
var y = new GenericClass<SomethignDerivedFromBaseClass>();
をしかし、あなたが言うことができませんでした:
var z = new GenericClass<int>();
を
int
はbaseClass
から継承されていません。
あなたが実際にGenericClass<T>
内からコード行を呼び出した場合、実際に上記のインスタンスでT
を使用する唯一の方法は次のとおりです。
public GenericClass<T> where T : baseClass
{
void SomeMethod()
{
GenericClass<T> genericInst = new GenericClass<T>();
}
}
またはTはすでにサブあることが知られている別の文脈からbaseClassのクラス。
public class GenericClass<T> where T : baseClass
{
public List<T> Items { get; set; }
...
}
を使用すると、リストに基底クラスから派生し、物事を追加し、答えることができるかどうか:あなたはあなたが持っていた場合、その疑問に思っているようにあなたのコメントに基づいて
UPDATE
は、それが聞こえますはい、そうです。 baseClassを継承するT
に対して、クラスGenericClass<T>
を宣言できます。しかし、List<T>
はまだタイプしても強いタイプのT
となります。これらを与えている
:T
はBaseClass
になりますので、
public class BaseClass { }
public class SubClass : BaseClass { }
GenericClass<BaseClass>
がそれにBaseClass
との両方を保持することができますがList<T>
です。
しかしGenericClass<SubClass>
はT
がになりますので、唯一またはその継承の項目を保持することができList<T>
を持つことになります。
上記のTをどのような文脈で使用していますか?種別: –