Таким образом, поскольку нас не волнует фактический тип элементов в коллекции, все, что мы получаем, это объекты. Примечание: если в коллекции содержались примитивные типы (например, int или byte), то запускаются автобокс, что может привести к снижению производительности.

рабатываю приложение, в котором мне нужно вызвать метод универсального класса, и меня не волнует фактический тип экземпляров. Что-то вроде следующего кода 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 не представляется возможным, использование неуниверсального базового класса или интерфейса представляется единственным способом.

Ответы на вопрос(5)

Ваш ответ на вопрос