In C# cosa significa where T : class
?In C# cosa significa 'dove T: class' significa?
Ie.
public IList<T> DoThis<T>() where T : class
In C# cosa significa where T : class
?In C# cosa significa 'dove T: class' significa?
Ie.
public IList<T> DoThis<T>() where T : class
poche parole questa è vincolante la parametro generico per una classe (o più specificamente un tipo di riferimento che potrebbe essere una classe, un'interfaccia, un delegato o un tipo di matrice).
Vedere questo MSDN article per ulteriori dettagli.
"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
È un generic type constraint. In questo caso significa che il tipo generico T
deve essere un tipo di riferimento (classe, interfaccia, delegato o tipo di matrice).
significa che il tipo utilizzato come T
quando il metodo generico viene utilizzato deve essere una classe - cioè non può essere una struttura o costruito nel numero come int
o double
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
È un vincolo di tipo su T
, che specifica che deve essere una classe.
La clausola where
può essere utilizzato per specificare altri vincoli di tipo, ad es .:
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 di MSDN sul where
clause o generic parameter constraints.
È possibile combinarli insieme, ad esempio: 'dove T: class, IComparable, new()' – Izzy
Ciò limita i tipi di riferimento T
a . Lì non sarà possibile inserire tipi di valore (struct
s e tipi primitivi eccetto string
).
Si chiama un vincolo del parametro di tipo. Effettivamente limita il tipo T può essere.
L'argomento tipo deve essere un tipo di riferimento ; questo vale anche per qualsiasi classe, interfaccia , delegato o tipo di matrice.
T rappresenta un tipo di oggetto di, implica che si può dare qualsiasi tipo di. IList: if IList s = new IList; Ora s.add ("Accetta sempre stringa.").
where T: class
significa letteralmente che T has to be a class
. Può essere qualsiasi tipo di riferimento. Ora ogni volta che un codice chiama il tuo metodo DoThis<T>()
, deve fornire una classe per sostituire T.Per esempio, se dovessi chiamare il metodo di DoThis<T>()
allora dovrò chiamarlo come segue:
DoThis<MyClass>();
Se il metthod è come come la seguente:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Allora dove mai T appare nella vostra metodo, sarà sostituito da MyClass. Così l'ultimo metodo che le chiamate compilatore, avrà un aspetto 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
}
Qui T si riferisce ad un Class.It può essere un tipo di riferimento.
Hai perso un caso. L'argomento di tipo per T può anche essere * qualsiasi altro parametro di tipo che è vincolato ad essere un tipo di riferimento *. –
Upvoted per il collegamento MSDN fornito. è molto utile – SaddamBinSyed