Spesso mi trovo in una situazione in cui creo un'interfaccia o una classe generica e quindi desidero utilizzare versioni diverse di questa classe o interfaccia in un modo non generico. Per esempio io possa avere un'interfaccia come questa:Versioni non generiche di classi e interfacce generiche
interface ICanCreate<T>
{
T NewObject();
}
che consente una classe di essere una fabbrica per quel tipo. Allora voglio registrare questi con una classe generale fabbrica quindi provo a scrivere qualcosa del genere:
public class Factory
{
private Dictionary<Type, ICanCreate> mappings; // what do I put here????
public void RegisterCreator<T>(ICanCreate<T> creator)
{
}
public T Create<T>()
{
}
}
Nel dizionario, che tipo devo utilizzare per il mio valore? Non so se mi manca una sorta di principio di progettazione e sono consapevole che questo ha molto a che fare con la varianza co (ntra?). Qualsiasi aiuto o idea sarebbe molto apprezzato.
Cosa diresti è il più preferito uno dei due? Vado sempre per la soluzione numero due se sono in questa situazione, credendo che sia una soluzione più elegante. È, o non importa? – Razzie
Ci sono membri che potresti inserire sensibilmente nell'interfaccia non generica? Se l'interfaccia è * solo * il metodo Create, allora rimango con l'oggetto: l'interfaccia non generica non ti darebbe alcunché. In altri casi, si può essere in grado di farla franca solo facendo riferimento all'interfaccia non generica in cui non si conosce l'argomento del tipo giusto, nel qual caso ciò fornisce un vantaggio evidente. –
Cancella, grazie per il commento! – Razzie