Ключевое слово 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),
Это просто способ гарантировать, что передаваемый тип может быть создан с помощью конструктора без параметров.