Больше мелочей, чем действительно важно: почему нет ограничения new () для Activator.CreateInstance ()?

Я думаю, что есть люди, которые могут ответить на этот вопрос, это вопрос из любопытства:

Общий метод 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 (). В этом случае данный ответ кажется единственной веской причиной не ограничивать метод ...

Спасибо, что просмотрели это!

12
задан flq 3 March 2011 в 23:38
поделиться