La clausola where viene utilizzata per specificare vincoli di tipo che possono servire come variabili per parametri di tipo definiti in dichiarazioni generiche. 1. Vincoli di interfaccia. Ad esempio, puoi dichiarare una classe generica MyGenericClass, così che il parametro di tipo T possa implementare<T> l'interfaccia IComparable:
classe pubblica<T> MyGenericClass dove T:IComparable { }
2. Vincolo della classe base: Indica che un tipo deve usare la classe specificata come classe base (o la classe stessa) da usare come parametro di tipo per quel tipo generico. Una volta usato tale vincolo, deve comparire prima di tutti gli altri vincoli sul tipo di parametro. classe MyClassy<T, U> dove T : classe dove U : struct
{
}
La clausola 3.where può anche includere vincoli del costruttore. Puoi usare il nuovo operatore per creare un'istanza di un parametro di tipo; Ma l'argomento di tipo deve essere vincolato dal vincolo del costruttore new() per questo. Il vincolo new() informa il compilatore che qualsiasi tipo di argomento fornito deve avere un costruttore accessibile senza parametro (o predefinito). Per esempio: classe pubblica <T> MyGenericClass dove T: IComparable, new()
{ La seguente riga non è possibile senza un nuovo vincolo: Elemento T = nuovo T();
} Il vincolo new() appare alla fine della clausola where.
4. Per più parametri di tipo, ogni parametro di tipo utilizza una clausola where, Per esempio: interface MyI { } Dizionario della classe<TKey, TVal> dove TKey: Comparabile, IEnumerable dove TVal: MyI
{ Public void Aggiunge (chiave TKey, TVal val)
{
}
}
5. Puoi anche aggiungere vincoli ai parametri di tipo di metodi generici, come:
public bool <T>MyMethod(T t) dove T : IMyInterface { }
Si noti che la sintassi per descrivere i vincoli dei parametri di tipo è la stessa sia per i delegati che per i metodi:
delegare T <T>MyDelegate() dove T : new()
Generico dove
Il generico Where può qualificare i parametri di tipo. Ci sono diversi modi.
·dove T : struct limita il parametro di tipo che T deve ereditare da System.ValueType.
·dove T: classe limita il tipo Il parametro T deve essere un tipo di riferimento, cioè non può essere ereditato da System.ValueType.
dove T : new() limita il parametro di tipo T deve avere un costruttore predefinito
·dove T : NameOfClass limita il parametro di tipo T deve ereditare da una classe o implementare un'interfaccia.
Questi qualificatori possono essere combinati, come: classe pubblica Punto dove T : classe, IComparable, new() |