Сообщение Re[8]: Расскажите про интерфейсы от 21.01.2019 8:02
Изменено 21.01.2019 12:06 Kswapd
Re[8]: Расскажите про интерфейсы
Здравствуйте, _NN_, Вы писали:
_NN>Основная проблема это наследование состояния, а его в интерфейсе нет.
_NN>Не хотите реализацию по умолчанию, переопределяйте все методы по старинке. Никто не запрещает.
И зачем тогда методы с реализацией в интерфейсе? Замусоривание синтаксиса, ничего более. Если уж так нужно, можно сделать абстрактный класс. Но вообще не нужно. Интерфейс служит для объявления контракта — всё. Остальное излишне и может только добавить в код избыточную сложность.
_NN>Кстати, методы расширения тоже нарушают чистоту ?
_NN>[c#]
_NN>interface MyInterface { int G(); }
_NN>static class InterfaceExtensions
_NN>{
_NN> public static int F(this MyInterface i) { return i.G() + 1; }
_NN>}
А тут всё нормально: есть чистый интерфейс, есть реализующий его класс. Или от InterfaceExtensions предполагается наследование? Тогда плохо. Наследование реализации лучше заменить агрегированием — структура программы получается намного проще.
_NN>Основная проблема это наследование состояния, а его в интерфейсе нет.
_NN>Не хотите реализацию по умолчанию, переопределяйте все методы по старинке. Никто не запрещает.
И зачем тогда методы с реализацией в интерфейсе? Замусоривание синтаксиса, ничего более. Если уж так нужно, можно сделать абстрактный класс. Но вообще не нужно. Интерфейс служит для объявления контракта — всё. Остальное излишне и может только добавить в код избыточную сложность.
_NN>Кстати, методы расширения тоже нарушают чистоту ?
_NN>[c#]
_NN>interface MyInterface { int G(); }
_NN>static class InterfaceExtensions
_NN>{
_NN> public static int F(this MyInterface i) { return i.G() + 1; }
_NN>}
А тут всё нормально: есть чистый интерфейс, есть реализующий его класс. Или от InterfaceExtensions предполагается наследование? Тогда плохо. Наследование реализации лучше заменить агрегированием — структура программы получается намного проще.
Re[8]: Расскажите про интерфейсы
Здравствуйте, _NN_, Вы писали:
_NN>Основная проблема это наследование состояния, а его в интерфейсе нет.
_NN>Не хотите реализацию по умолчанию, переопределяйте все методы по старинке. Никто не запрещает.
И зачем тогда методы с реализацией в интерфейсе? Замусоривание синтаксиса, ничего более. Если уж так нужно, можно сделать абстрактный класс. Но вообще не нужно. Интерфейс служит для объявления контракта — всё. Остальное излишне и может только добавить в код избыточную сложность.
_NN>Кстати, методы расширения тоже нарушают чистоту ?
_NN>[c#]
_NN>interface MyInterface { int G(); }
_NN>static class InterfaceExtensions
_NN>{
_NN> public static int F(this MyInterface i) { return i.G() + 1; }
_NN>}
А тут всё нормально: есть чистый интерфейс, есть код подстановки. В функцию F будут передаваться экземпляры конкретных классов, реализующих MyInterface.
_NN>Основная проблема это наследование состояния, а его в интерфейсе нет.
_NN>Не хотите реализацию по умолчанию, переопределяйте все методы по старинке. Никто не запрещает.
И зачем тогда методы с реализацией в интерфейсе? Замусоривание синтаксиса, ничего более. Если уж так нужно, можно сделать абстрактный класс. Но вообще не нужно. Интерфейс служит для объявления контракта — всё. Остальное излишне и может только добавить в код избыточную сложность.
_NN>Кстати, методы расширения тоже нарушают чистоту ?
_NN>[c#]
_NN>interface MyInterface { int G(); }
_NN>static class InterfaceExtensions
_NN>{
_NN> public static int F(this MyInterface i) { return i.G() + 1; }
_NN>}
А тут всё нормально: есть чистый интерфейс, есть код подстановки. В функцию F будут передаваться экземпляры конкретных классов, реализующих MyInterface.