共通のスーパー クラスを共有しない複数の「ジェネリック」オブジェクトを (たとえば、リストで) 収集する方法はありますか? もしそうなら、どうすれば共通のプロパティにアクセスできますか?
例えば:
class MyObject<T>
{
public T Value { get; set; }
public string Name { get; set; }
public MyObject(string name, T value)
{
Name = name;
Value = value;
}
}
var fst = new MyObject<int>("fst", 42);
var snd = new MyObject<bool>("snd", true);
List<MyObject<?>> list = new List<MyObject<?>>(){fst, snd};
foreach (MyObject<?> o in list)
Console.WriteLine(o.Name);
明らかに、これは疑似コードであり、機能しません。
また、.Value プロパティにアクセスする必要もありません (タイプ セーフではないため)。
編集:これについて考えてきたので、これにサブクラスを使用することが可能です。ただし、それは、新しい型ごとに新しいサブクラスを作成する必要があることを意味すると思います。
@ Grzenio はい、それはまさに私の質問に答えました。もちろん、共有インターフェイス全体を複製する必要がありますが、それは大きな問題ではありません。そう思ったはずなのに…
@akuアヒル のタイピングについてはあなたが正しいです。完全にランダムな 2 種類のオブジェクトにアクセスできるとは思いません。
しかし、汎用オブジェクトは、パラメータ化された型を除いてまったく同じであるため、ある種の共通インターフェースを共有すると思いました。どうやら、これは自動的には当てはまりません。