Страницы

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

четверг, 2 января 2020 г.

Extension Everything. Зачем оно нужно?

#c_sharp #net #c_sharp_80


Наткнулся на еще одно новшество новой редакции языка под названием Extension Everything
(Имхо спорное).

С точки зрения синтаксиса, что не нужно иметь статический класс, вроде, прикольно.

Однако теперь, как я понимаю, позволяетется,  расширять абсолютно все:

extension MyPersonExtension extends Person
{
    public int CountFingers()
    {
        this. // it call the current instance of Person
    }
}

extension MyPersonExtension extends Person
{
    public int NumberOfFingers()
    {
        get { ... }
    }
}

extension MyPersonExtension extends Person
{
    static int ... // You can add static things
}


Как видно в примере добавляются новые поля в класс.

Собственно, вопрос: Зачем это нужно, если в таком случае правильнее сделать наследование?

Если эта штука позволяет еще и запечатанные классы расширять, то это же противоречит
инкапсуляции..
    


Ответы

Ответ 1



Зачем это нужно? Это логичное продолжение подхода extension, позволяя описывать в расширениях не только методы, но и свойства, а так же статические поля. Как и в случае с extensions сейчас - исходный класс НЕ меняется. Так что никаких проблем с инкапсуляцией нет, как их нет сейчас с использованием extensions. Кроме того, в вопросе не упомянуто еще одна возможность: указывать что класс имплементирует нужный интерфейс extension MyPersonExtension extends Person : IEmployee // The Person class implements now the IEmployee interface in your assembly { [ ... ] }

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

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