ジェネリッククラスのメソッドを呼び出す必要があり、インスタンスの実際の型を気にしないアプリケーションを開発しています。次のJavaコードのようなもの:
public class Item<T>{
private T item;
public doSomething(){...}
}
...
public void processItems(Item<?>[] items){
for(Item<?> item : items)
item.doSomething();
}
急いでいたときは、呼び出す必要のあるメソッドでインターフェイスを定義し、ジェネリッククラスに実装させることで問題を解決しました。
public interface IItem
{
void doSomething();
}
public class Item<T> : IItem {
private T item;
public void doSomething(){...}
}
...
public void processItems(IItem[] items)
{
foreach(IItem item in items)
item.doSomething();
}
この回避策は問題なく機能しますが、同じ動作を実現するための正しい方法を知りたいと思います。
編集:
processItems
の発信者が実際のタイプを知らないことを参照するのを忘れました。実際のアイデアは、引数として渡された配列processItems
に混合型を含めることができるというものでした。.Netでそのような配列を使用することは不可能であるため、非ジェネリックの基本クラスまたはインターフェイスを使用することが唯一の方法のようです。