Risposte:
In poche parole, questo sta vincolando il parametro generico a una classe (o più specificamente un tipo di riferimento che potrebbe essere una classe, un'interfaccia, un delegato o un tipo di array).
Vedi questo articolo MSDN per ulteriori dettagli.
È un vincolo di tipo generico . In questo caso significa che il tipo generico T
deve essere un tipo di riferimento (classe, interfaccia, delegato o tipo di array).
È un vincolo di tipo su T
, che specifica che deve essere una classe.
La where
clausola può essere utilizzata per specificare altri vincoli di tipo, ad esempio:
where T : struct // T must be a struct
where T : new() // T must have a default parameterless constructor
where T : IComparable // T must implement the IComparable interface
Per ulteriori informazioni, consultare la pagina MSDN sulla where
clausola o vincoli di parametri generici .
where T : class, IComparable, new()
Ciò si limita T
ai tipi di riferimento . Non sarai in grado di inserire lì tipi di valore ( struct
se string
non tipi primitivi ).
where T: class
significa letteralmente quello T has to be a class
. Può essere qualsiasi tipo di riferimento. Ora ogni volta che un codice chiama il tuo DoThis<T>()
metodo deve fornire una classe per sostituire T . Ad esempio, se dovessi chiamare il tuo DoThis<T>()
metodo, dovrò chiamarlo come segue:
DoThis<MyClass>();
Se il tuo metodo è simile al seguente:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Quindi, ovunque T apparirà nel tuo metodo, verrà sostituito da MyClass. Quindi il metodo finale chiamato dal compilatore sarà simile al seguente:
public IList<MyClass> DoThis<MyClass>()
{
MyClass variablename= new MyClass();
//other uses of MyClass as a type
// all occurences of T will similarly be replace by MyClass
}
new T()
non è possibile con where T : class
. devi specificare where T: new()
di essere autorizzato a farlo.
Si chiama un vincolo di parametro di tipo. In effetti limita il tipo T che può essere.
L'argomento type deve essere un tipo di riferimento; questo vale anche per qualsiasi classe, interfaccia, delegato o tipo di array.
Qui T fa riferimento a una classe, può essere un tipo di riferimento.
'T' rappresenta un tipo generico. Significa che può accettare qualsiasi tipo di classe. Il seguente articolo potrebbe aiutare:
http://www.15seconds.com/issue/031024.htm