CS0304: "Невозможно создать экземпляр типа переменной type, потому что он не имеет ограничения new ()"
Если я напишу вот такой элементарный код
class MyClass<T> {
private T val;
public MyClass() {
val = new T();
}
}
то он не скомпилируется с ошибкой, котрая написана в заголовке вопроса.
И я могу исправить это, написав ограничение
class MyClass<T> where T : new() {
private T val;
public MyClass() {
val = new T();
}
}
Но есть вопрос.
я не понимаю, зачем это ограничение нужно.
То есть, я не могу себе представить ситуацию, когда у класса Т не может быть вызыван new(T)
Я рассуждаю так: если T - это ref type, то он наследуется от Object
У Object возможность вызвать new() - есть.
Значит, у T такая возможность тоже есть.
Но ограничение, наверное, придумали не просто так.
Нельзя ли пояснить подробнее, зачем оно нужно?