Я разрабатываю приложение, в котором мне нужно вызвать метод универсального класса, и мне не нужен фактический тип экземпляра. Что-то вроде следующего кода Java:Что такое эквивалент шаблонов Java в C# generics
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, использование не общего базового класса или интерфейса кажется единственным способом.
Blargh, через несколько секунд. : P –
Да, избили меня тоже. Можете ли вы редактировать с помощью примера вызывающего? –
просто 'ProcessItems (data);' –