Подтвердить что ты не робот

Что означает "where" в объявлении класса С#?

Я попытался это сделать Google, но все, что я мог найти, это документы в обычных объявлениях классов.

public class DataContextWrapper<T> : IDataContextWrapper where T : DataContext, new()
{

}

Я вижу, что класс реализует IDataContextWrapper, наследует от DataContext и изменяется с типом T в зависимости от того, как он создается.

Я не знаю, что может означать "where T" или ", new()".

4b9b3361

Ответ 1

Это общее ограничение и ограничивает, какие типы могут быть переданы в общий параметр.

В вашем случае требуется, чтобы T был indentical или получен из DataContext и имеет конструктор по умолчанию (без аргументов) (ограничение new()).

Вам нужны общие ограничения, чтобы на самом деле сделать что-то нетривиальное с родовым типом.

  • Ограничение new() позволяет создать экземпляр с new T().
  • Ограничение DataContext позволяет вам вызывать методы DataContext в экземпляре T

MSDN писал (а):

where T : <base class name>Аргумент типа должен быть или выводиться из указанного базового класса.

where T : new()Аргумент типа должен иметь открытый конструктор без параметров. При использовании вместе с другими ограничениями ограничение new() должно быть указано последним.

Ответ 2

Разрешать типы T, которые производны или реализованы DataContext, и иметь открытый конструктор, который не принимает аргументов.

Ответ 3

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

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

Ответ 4

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

Ответ 5

где T: DataContext читается как: T должен быть (или получен из a) DataContext "new()" читается как: должен иметь конструктор без параметров.

Ответ 6

Ключевое слово where используется для ограничения вашей типичной переменной типа, в вашем случае это означает, что тип T должен быть DataContext и должен содержать открытый конструктор по умолчанию.

Ответ 7

Это ограничения в типах, которые могут использоваться как общие. Это дает вам проверки компилятора плюс возможность делать что-то значимое с T.

Т.е. new() сообщает компилятору, что T должен иметь конструктор без параметров. Это означает, что вы можете создавать экземпляры T путем записи new T(); и, зная, что T также является DataContext, вы можете делать экземпляры T, но также и методы вызова на нем.

Ответ 9

Где есть ограничение на тип T. Новый говорит, что тип T должен быть реалистичным без каких-либо параметров. т.е. T thing = new T();

Подробнее здесь