Страницы

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

вторник, 24 декабря 2019 г.

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

#c_sharp #generics


Рассматривая тему ограничения обобщений, не понял, каково практическое применение
ограничения на конструктор. Вот есть пример класса, например студента:

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);

Но в каких ситуациях это вообще может потребоваться?  Какая задача должна передо
мной стоять, что бы мне потребовалось использовать ограничение на конструктор?
    


Ответы

Ответ 1



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

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

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