我正在开发一个应用程序,我需要调用泛型类的方法,而且我不关心实例的实际类型。类似下面的Java代码:什么是C#泛型中的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中不可能有这样的数组,因此使用非泛型基类或接口似乎是唯一的方法。
Blargh,几秒钟过早。 :P – 2009-02-09 11:25:53