В С# что означает "где T: класс"?

В С#, что означает where T : class?

Т.е.

public IList<T> DoThis<T>() where T : class

Ответ 1

Проще говоря, это ограничивает общий параметр классом (или, более конкретно, ссылочным типом, который может быть классом, интерфейсом, делегатом или типом массива).

Подробнее см. статью MSDN.

Ответ 2

Это ограничение общего типа. В этом случае это означает, что общий тип T должен быть ссылочным типом (класс, интерфейс, делегат или тип массива).

Ответ 3

Это ограничение типа на 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 или общие ограничения параметров.

Ответ 4

Это ограничивает T ссылочными типами. Вы не сможете разместить типы значений (struct и примитивные типы, кроме string) там.

Ответ 5

это означает, что тип, используемый как T, когда общий метод используется, должен быть классом - то есть он не может быть строкой или встроенным числом, например int или double

// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();

Ответ 6

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
 }

Ответ 8

T представляет собой тип объекта, это означает, что вы можете дать любой тип. IList: если IList s = новый IList; Теперь s.add( "Всегда принимать строку." ).

Ответ 9

'T' представляет общий тип. Это означает, что он может принимать любой тип класса. Следующая статья может помочь:

http://www.15seconds.com/issue/031024.htm

Ответ 10

Здесь T относится к классу. Он может быть ссылочным типом.