Відповіді:
Простіше кажучи, це обмеження загального параметра класом (або більш конкретно референсним типом, який може бути типом класу, інтерфейсу, делегата або масиву).
Докладнішу інформацію див. У цій статті 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