В С#, что означает where T : class?
Т.е.
public IList<T> DoThis<T>() where T : class
В С#, что означает where T : class?
Т.е.
public IList<T> DoThis<T>() where T : class
Проще говоря, это ограничивает общий параметр классом (или, более конкретно, ссылочным типом, который может быть классом, интерфейсом, делегатом или типом массива).
Подробнее см. статью 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 или общие ограничения параметров.
Это ограничивает 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>();
Если ваше metthod похоже на следующее:
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
}
Он называется ограничением параметра типа. Фактически это ограничивает тип T.
Аргумент типа должен быть ссылкой тип; это относится и к любому классу, интерфейса, делегата или массива.
Ограничения по параметрам типа (Руководство по программированию на С#)
T представляет собой тип объекта, это означает, что вы можете дать любой тип. IList: если IList s = новый IList; Теперь s.add( "Всегда принимать строку." ).
'T' представляет общий тип. Это означает, что он может принимать любой тип класса. Следующая статья может помочь:
http://www.15seconds.com/issue/031024.htm
Здесь T относится к классу. Он может быть ссылочным типом.