Sto guardando il codice sorgente per il MvcContrib Grid e vedere la classe dichiarata come:Cosa fa la parola chiave "where" in una dichiarazione di classe?
public class Grid<T> : IGrid<T> where T : class
Che cosa il bit where T : class
fare?
Sto guardando il codice sorgente per il MvcContrib Grid e vedere la classe dichiarata come:Cosa fa la parola chiave "where" in una dichiarazione di classe?
public class Grid<T> : IGrid<T> where T : class
Che cosa il bit where T : class
fare?
È un generic type constraint.
In questo caso significa che il tipo generico (T
) deve essere un tipo di riferimento, ovvero classe, interfaccia, delegato o tipo di matrice.
Altri vincoli sono elencati here.
È possibile anche limitare il tipo generico di ereditare da un tipo specifico (classe di base o l'interfaccia)
Essa limita T per essere a reference type, including any class, interface, delegate, or array type.
Dai documenti http://msdn.microsoft.com/en-us/library/d5x73970.aspx
dove T: classe
L'argomento tipo deve essere un tipo di riferimento; questo vale anche per qualsiasi classe, interfaccia, delegato o tipo di matrice.
Altri esempi possono essere
public A<T> where T : AnInterface
dove AnInterface
è una classe di interfaccia. Significa quindi che lo T
deve implementare questa interfaccia.
Questi vincoli sono importanti, in modo che il compilatore conosca le operazioni valide per il tipo. Ad esempio, non è possibile chiamare le funzioni di T
senza dire al compilatore quali sono le funzioni fornite dal tipo.
È un vincolo sull'argomento del tipo che dice che T può essere una classe o un'interfaccia ma non un enum o una struttura. Quindi T deve essere un tipo di riferimento e non un tipo di valore.
migliori saluti,
Oliver Hanappi
è possibile applicare restrizioni ai tipi di tipi che il codice cliente può utilizzare per argomenti di tipo quando si crea un'istanza della classe sono chiamati come Constraints on Type Parameters
Ad esempio: dove T: classe
Qui dove T
è il tipo, l'argomento tipo deve essere un tipo di riferimento; questo vale anche per qualsiasi classe, interfaccia, delegato o tipo di matrice.
È un vincolo di tipo generico. Specifica che il tipo T
deve essere un tipo di riferimento, vale a dire una classe e non una struttura.
possibile duplicato di http://stackoverflow.com/questions/221687/can-you-use-where-to-require-an-attribute-in-c –
@Jon Seigel - sicuramente non è un duplicato di quella domanda. – Oded