Ho visto alcuni esempi in cui hanno trasformato una chiamata comeQuali sono i vantaggi dell'utilizzo di una chiamata generics-where-clause su una chiamata non generica?
void Add(IDrawing item);
in
void Add<TDrawing>(TDrawing item) where TDrawing : IDrawing;
Accanto ingannando l'intellisense nella visualizzazione del nome della classe invece del nome dell'interfaccia quando si chiama la funzione, a causa del tipo di utilizzo inferito in C# 4, ci sono altri vantaggi nell'usare il secondo approccio?
Per rispondere a Jon Skeet, il codice il nostro programmatore utilizzato è:
public ObservableCollection<IDrawing> Items { get; private set; }
public void Add<TDrawing>(TDrawing item) where TDrawing : IDrawing
{
this.Items.Add(item);
}
Non vedo alcun vantaggio qui per l'utilizzo di un generico invece di utilizzare un parametro di tipo IDrawing
. Presumo che ci debba essere un caso in cui è molto appropriato. Ero curioso di vedere se mi mancava qualcosa.
"Oltre a ingannare l'intellisense nel mostrare il nome della tua classe" ... dannazione, non mi ero reso conto che sarebbe stato così, è quasi una ragione sufficiente per me voler usare il secondo approccio. – heisenberg
Note secondarie secondarie: il termine .NET è "generici"; sono molto diversi dai "modelli" C++ o T4. –
Aggiornato per utilizzare i generici. Mi dispiace, l'abitudine dei vecchi è vecchia. –