Я разрабатываю приложение, в котором мне нужно вызвать метод универсального класса, и мне не нужен фактический тип экземпляра. Что-то вроде следующего кода 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();
}
Это обходное решение работает отлично, но я хотел бы знать, что является правильным способом достижения такого же поведения.
EDIT:
Я забыл сослаться на то, что вызывающий processItems
не знает фактические типы. На самом деле идея заключалась в том, что массив, переданный как аргумент processItems
, мог содержать смешанные типы. Так как его невозможно получить в .Net, использование не общего базового класса или интерфейса кажется единственным способом.