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 такая возможность тоже есть.

Но ограничение, наверное, придумали не просто так.

Нельзя ли пояснить подробнее, зачем оно нужно?


Ответы (0 шт):