Estoy desarrollando una aplicación donde necesito invocar un método de una clase genérica y no me importan las instancias del tipo real. Algo así como el siguiente código de Java:¿Cuál es el equivalente de comodines de Java en genéricos C#
public class Item<T>{
private T item;
public doSomething(){...}
}
...
public void processItems(Item<?>[] items){
for(Item<?> item : items)
item.doSomething();
}
En ese momento yo estaba en una prisa, así que resolvió mi problema definiendo una interfaz con los métodos que necesitaba para invocar e hizo la clase genérica en práctica.
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();
}
Esta solución funciona bien, pero me gustaría saber cuál es la forma correcta para lograr el mismo comportamiento.
EDIT:
me olvidó referirse a que la persona que llama de processItems
no conoce los tipos reales. En realidad, la idea era que el conjunto pasado como argumento a processItems
podría contener tipos entremezclados. Como no es posible tener una matriz de este tipo en .Net, el uso de una clase base o interfaz no genérica parece ser la única forma.
Blargh, unos segundos antes de tiempo. : P –
Sí, vencerme también. Sin embargo, ¿puedes editar con un ejemplo de la persona que llama? –
solo 'ProcessItems (data);' –