Ответы:
Проще говоря, это ограничение общего параметра классом (или, более конкретно, ссылочным типом, который может быть классом, интерфейсом, делегатом или типом массива).
См. Эту статью 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
кроме типов s и примитивов string
).
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