#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 { [ ... ] }
Комментариев нет:
Отправить комментарий