Страницы

Поиск по вопросам

понедельник, 26 ноября 2018 г.

Ограничение на конструктор new(), обобщенное программирование

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


Ответ

Но в каких ситуациях это вообще может потребоваться?
Например, когда при описании класса-фабрики, который имеет какой-нибудь метод типа
T CreateObj()
Если ты не установишь это ограничение, то не сможешь внутри метода вызвать метод new => тебе придется обращаться напрямую через рефлексию(ограничение позволяет переложить это на плечи компилятора) к конструктору без параметров, которого может и не быть=> программа может упасть.

Комментариев нет:

Отправить комментарий