Sto sviluppando un'applicazione in cui è necessario richiamare un metodo di una classe generica e non mi interessa il tipo effettivo delle istanze. Qualcosa come il seguente codice Java:Qual è l'equivalente dei caratteri jolly Java nei generici C#
public class Item<T>{
private T item;
public doSomething(){...}
}
...
public void processItems(Item<?>[] items){
for(Item<?> item : items)
item.doSomething();
}
A quel tempo ero in fretta, così ho risolto il mio problema definendo un'interfaccia con i metodi di cui avevo bisogno per invocare e ha reso la classe generica attuarla.
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();
}
Questa soluzione funziona bene, ma mi piacerebbe sapere qual è il modo corretto per ottenere lo stesso comportamento.
EDIT:
Ho dimenticato di riferimento che il chiamante di processItems
non conosce i tipi effettivi. In realtà l'idea era che l'array passato come argomento a processItems
potesse contenere tipi combinati. Dal momento che non è possibile avere un tale array in .Net, l'uso di una classe base o di una interfaccia non generica sembra essere l'unico modo.
Blargh, pochi secondi troppo presto. : P –
Sì, picchia anche me. Puoi modificare con un esempio del chiamante, però? –
solo 'ProcessItems (dati);' –