Відповіді:
Простіше кажучи, це обмеження загального параметра класом (або більш конкретно референсним типом, який може бути типом класу, інтерфейсу, делегата або масиву).
Докладнішу інформацію див. У цій статті MSDN .
Це обмеження загального типу . У цьому випадку це означає, що загальний тип Tповинен бути посилальним типом (клас, інтерфейс, делегат або тип масиву).
Це обмеження типу T, вказуючи, що він повинен бути класом.
Цей whereпункт може використовуватися для визначення інших обмежень типу, наприклад:
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
Для отримання додаткової інформації відвідайте сторінку MSDN цього whereпункту або загальні обмеження параметрів .
where T : class, IComparable, new()
Це обмежує Tдля посилальних типів . Ви не зможете помістити туди типи значень ( structокрім примітивних та типових типів string).
це означає, що тип, що використовується, Tколи використовується загальний метод, повинен бути класом, тобто він не може бути структурою або вбудованим числом на зразок intабоdouble
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
where T: class буквально це означає T has to be a class. Це може бути будь-який референтний тип. Тепер , коли будь-який код викликає ваш DoThis<T>()метод , який він повинен забезпечити клас для заміни T . Наприклад, якщо я хотів би викликати ваш DoThis<T>()метод, то мені доведеться називати його так:
DoThis<MyClass>();
Якщо ваш метод став таким, як:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Тоді, де коли-небудь T з'явиться у вашому методі, його буде замінено MyClass. Отже, остаточний метод, який викликає компілятор, буде виглядати наступним чином:
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()неможливо при where T : class. Ви повинні вказати, where T: new()щоб це було дозволено.
Він називається обмеженням параметра типу. Ефективно це обмежує, яким може бути тип T.
Аргумент типу повинен бути еталонним типом; це стосується також будь-якого типу класу, інтерфейсу, делегата або типу масиву.
Обмеження щодо параметрів типу (Посібник з програмування C #)
Тут T посилається на клас. Він може бути еталонним типом.
'T' являє собою родовий тип. Це означає, що він може приймати будь-який тип класу. Наступна стаття може допомогти:
http://www.15seconds.com/issue/031024.htm