Мисля, че има хора, които могат да отговорят на това, това е въпрос от любопитство:
Генеричният CreateInstance
метод от System.Activator
, въведен в .NET v2, няма ограничения за типа на общия аргумент, но изисква конструктор по подразбиране за активирания тип, в противен случай се хвърля MissingMethodException
. За мен изглежда очевидно, че този метод трябва да има ограничение на типа като
Activator.CreateInstance<T>() where T : new() {
...
}
Просто пропуск или някакъв анекдот се крие тук?
Актуализация
Както беше посочено, компилаторът не ви позволява да пишете
private T Create<T>() where T : struct, new()
error CS0451: The 'new()' constraint cannot be used with the 'struct' constraint
Въпреки това, вижте коментарите, структура може да се използва като аргумент за тип към общ метод, указващ ограничение new(). При това обстоятелство даденият отговор изглежда единствената валидна причина да не се ограничава методът...
Благодаря, че разгледахте това!
default(T)
. - person Adam Robinson   schedule 04.03.2011void Foo<T>() where T:new() {}
,Foo<DateTime>();
илиFoo<int>();
са напълно валидни извиквания, от които компилаторът няма да се оплаче. - person Adam Robinson   schedule 04.03.2011new
изглежда е въведено едновременно с генеричните продукти, така че не е като проблем с обратната съвместимост. Може би просто са забравили? - person StriplingWarrior   schedule 04.03.2011