#c_sharp #generics
Рассматривая тему ограничения обобщений, не понял, каково практическое применение ограничения на конструктор. Вот есть пример класса, например студента: class Student { public Student(){} } А вот есть обобщенный класс: class Class2where T : new() { public T typeTinClass2; public Class2() { typeTinClass2 = new T(); } } И допустим еще какая то тривиальная вызывающая часть программы: class Program { static void Main() { Class2 vasiliy = new Class2 (); } } Вопрос простой - в каких реальных ситуациях это можно использовать? Допустим есть ограничение на класс и интерфейс, зачем они нужны осознать не сложно, потому что сразу понятно когда и как это может быть использовано. Но как можно использовать ограничение на конструктор? Да, есть возможность в обобщенном коде создать экземпляр класса такого типа, который был передан в <>, я так же понимаю что есть например такая вот возможность: Console.WriteLine(vasiliy.typeTinClass2.someField); Но в каких ситуациях это вообще может потребоваться? Какая задача должна передо мной стоять, что бы мне потребовалось использовать ограничение на конструктор?
Ответы
Ответ 1
Но в каких ситуациях это вообще может потребоваться? Например, когда при описании класса-фабрики, который имеет какой-нибудь метод типа T CreateObj() Если ты не установишь это ограничение, то не сможешь внутри метода вызвать метод new => тебе придется обращаться напрямую через рефлексию(ограничение позволяет переложить это на плечи компилятора) к конструктору без параметров, которого может и не быть=> программа может упасть.
Комментариев нет:
Отправить комментарий