C# LanguageGenerics

Sintassi

  • public void SomeMethod <T> () { }
  • public void SomeMethod<T, V>() { }
  • public T SomeMethod<T>(IEnumerable<T> sequence) { ... }
  • public void SomeMethod<T>() where T : new() { }
  • public void SomeMethod<T, V>() where T : new() where V : struct { }
  • public void SomeMethod<T>() where T: IDisposable { }
  • public void SomeMethod<T>() where T: Foo { }
  • public class MyClass<T> { public T Data {get; set; } }

Parametri

Parametro (s) Descrizione
TV Digitare segnaposto per dichiarazioni generiche

Osservazioni

Generics in C # sono supportati fino al runtime: i tipi generici creati con C # conservano la loro semantica generica anche dopo essere stati compilati in CIL .

Ciò significa in effetti che, in C #, è possibile riflettere su tipi generici e vederli come sono stati dichiarati o controllare se un oggetto è un'istanza di un tipo generico, ad esempio. Ciò è in contrasto con la cancellazione del tipo , in cui le informazioni di tipo generico vengono rimosse durante la compilazione. È anche in contrasto con l'approccio del modello ai generici, in cui più tipi generici concreti diventano più tipi non generici in fase di runtime e tutti i metadati necessari per un'ulteriore definizione delle definizioni del tipo generico originale vengono persi.

Prestare attenzione, tuttavia, quando si riflette su tipi generici: i nomi dei tipi generici verranno alterati nella compilazione, sostituendo le parentesi angolate ei nomi dei parametri di tipo con un apice seguito dal numero di parametri di tipo generico. Pertanto, un Dictionary<TKey, Tvalue> sarà tradotto nel Dictionary`2 .

Generics Esempi correlati