Что за конструкция Class Foo:Bar,new(){ public Foo(){}}

268
18 февраля 2017, 04:38

Разбираюсь в исходниках Asp.Net встретил следущую конструкцию

public class OAuthMiddleware<TOptions> : AuthenticationMiddleware<TOptions>               
   where TOptions : OAuthOptions, new()
{
    public OAuthMiddleware()
    { 
        //code here...
    }     
}

Класс OAuthMiddleware наследует класс AuthenticationMiddleware и new() Возникло три вопроса.

  1. new() - это анонимный класс?
  2. Почему в этом анонимном классе конструктор OAuthMiddleware
  3. Для чего используется подобная конструкция? Какой это шаблон проектирование, если известно, что от этого класса наследуются другие?
Answer 1

Ваш тип OAuthMiddleware — это обобщённый тип (generic) с параметром TOptions, и то, что после where — это ограничения на этот самый тип-параметр вашего обобщённого типа.

where TOptions : OAuthOptions, new()

означает, что тип TOptions должен

  • быть наследником OAuthOptions, и
  • иметь публичный конструктор без параметров.

Для чего может понадобиться ограничение new()? Например, в коде класса можно будет создать экземпляр этого типа:

TOptions opt = new TOptions();

Без ограничения на существование такого конструктора этот код невозможно было бы скомпилировать.

READ ALSO
Как получить доступ к файловой системе смартфона?

Как получить доступ к файловой системе смартфона?

Работаю с накопителями в файловой системе через DriveInfoОднако, если подключить к компьютеру смартфон, то DriveInfo

413
IPC между C++ и C# используя MMF

IPC между C++ и C# используя MMF

Как передать строку из C++ std::string в приложение на C# используя Memory Mapped File?

303