2

これはC#4.0で導入されましたが、C#3.0でこれを実現する方法はありますか?

たとえば、次のコードについて考えてみます。

class Base
{
}

class Derived1 : Base
{
}

class Derived2 : Base
{
}

class User<T> where T : Base
{
}

class User1 : User<Derived1>
{
}

User<T>ここで、を保存できるUser<Derived1>リストを作成したいのUser<Derived2>ですが、次のコードはC#3.0でコンパイルできません。

List<User<Base>> users = new List<User<Base>>();
users.Add(new User1());

何か案は?

4

2 に答える 2

2

良い回避策がないだけでなく、コードはC#4.0でも機能しません。インターフェースとデリゲートのみが分散をサポートしているため、User<Derived>をとして扱うことはできませんUser<Base>

于 2010-04-05T14:33:08.920 に答える
0

最も簡単なアプローチは、おそらくArrayListまたはを使用しList<object>てキャストを自分で処理することです。C#3でそれを行うためのエレガントな方法はありません。

于 2010-04-05T13:58:10.190 に答える