Что значит new ()? - PullRequest
       18

Что значит new ()?

13 голосов
/ 21 ноября 2010

Существует класс AuthenticationBase в Службах RIA WCF.Определение класса выглядит следующим образом:

// assume using System.ServiceModel.DomainServices.Server.ApplicationServices

public abstract class AuthenticationBase<T> 
    : DomainService, IAuthentication<T> 
    where T : IUser, new()

Что означает new() в этом коде?

Ответы [ 3 ]

21 голосов
/ 21 ноября 2010

Это новое ограничение .

Оно указывает, что T не должно быть абстрактным и должно представлять public без параметров конструктор для использования в качестве аргумента универсального типа для класса AuthenticationBase<T>.

7 голосов
/ 21 ноября 2010

Использование ключевого слова new () требует определения конструктора по умолчанию для указанного класса.Без ключевого слова попытка класса new () не скомпилируется.

Например, следующий фрагмент не скомпилируется.Функция попытается вернуть новый экземпляр параметра.

public T Foo <T> ()
// Compile error without the next line
// where T: new()
{
    T newInstance = new T();
    return newInstance;
}

Это ограничение общего типа.См. Эту статью MSDN .

5 голосов
/ 21 ноября 2010

Это означает, что тип, используемый для заполнения универсального параметра T, должен иметь конструктор public и без параметров.Если тип не реализует такой конструктор, это приведет к ошибке времени компиляции.

Если применяется универсальное ограничение new(), как в этом примере, которое позволяет классу или методу (AuthenticationBase<T> класс в данном случае) для вызова new T(); для создания нового экземпляра указанного типа.Нет другого способа, кроме рефлексии (это включает использование System.Activator для создания нового объекта универсального типа.

...