Ключевое слово new() в конце объявления метода

Товарищ по работе только что дал мне несколько классов C#, которые я должен использовать в приложении.NET.
Есть опечатка, которую я никогда не видел, и я не могу найти никаких объяснений в Интернете...

Вот код:

public void GoTo<TView>() where TView : Form, new()
{
    var view = Activator.CreateInstance<TView>();

    //si on vient de creer une startup view alors on affiche l'ancienne
    //la reference a la nouvelle sera detruite en sortant de la fonction GoTo
    if (view is StartupForm)
    {
        ShowView(_StartupForm);
    }
    else ShowView(view);

}

Что new() ключевое слово для, прямо в конце объявления метода?

3 ответа

Решение

Смотрите MSDN:

Новое ограничение указывает, что любой аргумент типа в объявлении универсального класса должен иметь открытый конструктор без параметров. Чтобы использовать новое ограничение, тип не может быть абстрактным.

Поэтому, когда вы говорите:

void myMethod<T>(T item) where T : class, new();

тогда это означает, что вы накладываете ограничение на универсальный параметр T. Таким образом, T должен быть ссылочным типом и не может быть типом значения (int, float, double и т. д.). Также у T должен быть открытый конструктор по умолчанию без параметров.

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

Это ограничение параметра типа, в частности ограничение-конструктор, подробно описанное в разделе 10.1.5 спецификации языка C#.

Если предложение where для параметра типа включает ограничение конструктора (которое имеет форму new()), можно использовать оператор new для создания экземпляров типа (§7.6.10.1). Любой аргумент типа, используемый для параметра типа с ограничением конструктора, должен иметь открытый конструктор без параметров (этот конструктор неявно существует для любого типа значения) или быть параметром типа, имеющим ограничение типа значения или ограничение конструктора (подробности см. В §10.1.5),

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

Другие вопросы по тегам