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