Yanıtlar:
Basitçe söylemek gerekirse, bu genel parametreyi bir sınıfa (veya daha spesifik olarak bir sınıf, arabirim, temsilci veya dizi türü olabilecek bir başvuru türü) sınırlamaktır.
Daha fazla ayrıntı için bu MSDN makalesine bakın.
Bu bir olan genel tür kısıtlaması . Bu durumda, genel türün T
bir başvuru türü (sınıf, arabirim, temsilci veya dizi türü) olması gerektiği anlamına gelir .
Bu T
, bir sınıf olması gerektiğini belirten bir tür kısıtlamasıdır .
where
Fıkra gibi diğer tip sınırlamaları belirtebilirsiniz kullanılabilir:
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
Daha fazla bilgi için, MSDN'nin where
yan tümce veya genel parametre kısıtlamalarına ilişkin sayfasına bakın .
where T : class, IComparable, new()
Bu T
, referans türleriyle sınırlıdır . Değer türlerini (türleri struct
ve ilkel türleri hariç string
) oraya koyamazsınız .
where T: class
tam anlamıyla bu demektir T has to be a class
. Herhangi bir referans türü olabilir. Artık herhangi bir kod DoThis<T>()
yönteminizi çağırdığında, T'nin yerini alacak bir sınıf sağlamalıdır . Örneğin, DoThis<T>()
yönteminizi çağıracak olsaydım, aşağıdaki gibi çağırmam gerekecek:
DoThis<MyClass>();
Yönteminiz aşağıdaki gibiyse:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Daha sonra yönteminizde T göründüğü her yerde, MyClass ile değiştirilecektir. Dolayısıyla, derleyicinin çağırdığı son yöntem aşağıdaki gibi görünecektir:
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()
ile mümkün değildir where T : class
. bunu yapmanıza where T: new()
izin verilmesini belirtmeniz gerekir.
Bir tür parametresi kısıtlaması olarak adlandırılır. Etkili bir şekilde T tipinin ne olabileceğini kısıtlar.
Tür bağımsız değişkeni bir başvuru türü olmalıdır; bu aynı zamanda herhangi bir sınıf, arabirim, temsilci veya dizi türü için de geçerlidir.
Tip Parametrelerinde Kısıtlamalar (C # Programlama Kılavuzu)
Burada T bir Sınıfı ifade eder ve bir referans türü olabilir.
'T' genel bir türü temsil eder. Bu, her tür sınıfı kabul edebileceği anlamına gelir. Aşağıdaki makale yardımcı olabilir:
http://www.15seconds.com/issue/031024.htm