Это не ограничение конструктора по умолчанию , это ограничение конструктора без параметров . Класс должен иметь конструктор без параметров, независимо от того, является ли этот конструктор неявно созданным конструктором по умолчанию или явно объявленным конструктором без параметров.
Оба эти класса удовлетворяют условию:
public class A {
}
public class B {
public B() { }
}
Но не этот, так как не существует неявно созданного конструктора, если у вас есть явно объявленные конструкторы:
public class C {
public C(int id) { }
}
Поскольку это конструктор без параметров, его можно использовать только одним способом:
T item = new T();
Странно, если в спецификации нет упоминания об этом, но, по крайней мере, это ясно описано в справочнике C # от MS: new Constraint . Однако спецификация не предназначена для чтения так же, как документация, поэтому может быть трудно найти, где именно она упоминается, и она может быть упомянута только один раз.