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

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

 // assume using System.ServiceModel.DomainServices.Server.ApplicationServices public abstract class AuthenticationBase : DomainService, IAuthentication where T : IUser, new() 

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

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

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

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

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

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

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

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

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

  • Есть ли гарантия выравнивания возврата адреса с помощью новой операции C ++?
  • Как delete знает, что это массив?
  • Передача аргументов в C # generic new () шаблонного типа
  • В чем разница между созданием экземпляра объекта с использованием нового vs.
  • Можно ли удалить не новый объект?
  • Когда следует использовать новое ключевое слово в C ++?
  • Как инициализировать память новым оператором в C ++?
  • Печать в новой строке, java
  • Новый вызывает конструктор по умолчанию в C ++?
  • Будет ли новый возврат NULL в любом случае?
  • В чем отличия между VirtualAlloc и HeapAlloc?
  • Давайте будем гением компьютера.