Сообщение Re[5]: [Ann] Next big thing in c#: default interface methods от 26.03.2017 11:31
Изменено 26.03.2017 11:46 Silver_S
Re[5]: [Ann] Next big thing in c#: default interface methods
Здравствуйте, VladD2, Вы писали:
VD>Делегаты ты в поля кладешь и ничего вроде. Чем интерфейс отличается в данном случае?
Только тем что не так громоздко выглядит, как если: 4 делегата передавать в конструктор. Для этих делегатов имена параметров задать нельзя (иногда это очень плохо) голые Func, хорошо если делегаты без ref,out. Либо явно объявлять 4 delegate. Еще и 4 поля и 4 присвоения.
Ну лучше бы выглядел код, с interface, когда так много делегатов передается.
S_S>>Альтернатива только в классе-клиенте private nested класс делать, в нем интерфейс реализуется,
VD>Что-то все очень сложно. Можно просто реализовывать интерфейс или базовый класс во вложенном приватном классе. Все детали останутся в нем, а возвращен будет публичный интерфейс. Возможно я не очень понимаю решаемой задачи.
Я об этом и говорю — во вложенном приватном классе, и в этот вложенный приватный класс передавать ссылку на родительский класс. Компактнее бы это все выглядело как private наследование.
Смысл в том что наружу этот интерфейс не показывается, он передается только агрегированным приватным объектам.
Такое имеется ввиду ( в конструктор Some надо передавать IInterface1):
Было бы private наследование, никому бы не мешало, когда не надо. А здесь бы можно было так:
Зачем вынесен Some из Parent это другой вопрос — этот Some используется в нескольких Parent, и к тому же должен быть в другой более абстрактной сборке.
VD>Делегаты ты в поля кладешь и ничего вроде. Чем интерфейс отличается в данном случае?
Только тем что не так громоздко выглядит, как если: 4 делегата передавать в конструктор. Для этих делегатов имена параметров задать нельзя (иногда это очень плохо) голые Func, хорошо если делегаты без ref,out. Либо явно объявлять 4 delegate. Еще и 4 поля и 4 присвоения.
Ну лучше бы выглядел код, с interface, когда так много делегатов передается.
S_S>>Альтернатива только в классе-клиенте private nested класс делать, в нем интерфейс реализуется,
VD>Что-то все очень сложно. Можно просто реализовывать интерфейс или базовый класс во вложенном приватном классе. Все детали останутся в нем, а возвращен будет публичный интерфейс. Возможно я не очень понимаю решаемой задачи.
Я об этом и говорю — во вложенном приватном классе, и в этот вложенный приватный класс передавать ссылку на родительский класс. Компактнее бы это все выглядело как private наследование.
Смысл в том что наружу этот интерфейс не показывается, он передается только агрегированным приватным объектам.
Такое имеется ввиду ( в конструктор Some надо передавать IInterface1):
class Parent
{
private class Interface1Impl : IInterface1
{
public Interface1Impl(Parent p)
{
_p = p;
}
Parent _p;
}
public Parent()
{
_interface1Impl=new Interface1Impl(this);
_some = new Some(_interface1Impl);
}
private Some _some;
private Interface1Impl _interface1Impl;
}
Было бы private наследование, никому бы не мешало, когда не надо. А здесь бы можно было так:
class Parent: private IInterface1
{
public Parent()
{
_some = new Some(this);
}
private Some _some;
}
Зачем вынесен Some из Parent это другой вопрос — этот Some используется в нескольких Parent, и к тому же должен быть в другой более абстрактной сборке.
Re[5]: [Ann] Next big thing in c#: default interface methods
Здравствуйте, VladD2, Вы писали:
VD>Делегаты ты в поля кладешь и ничего вроде. Чем интерфейс отличается в данном случае?
Только тем что не так громоздко выглядит, как если: 4 делегата передавать в конструктор. Для этих делегатов имена параметров задать нельзя (иногда это очень плохо) голые Func, хорошо если делегаты без ref,out. Либо явно объявлять 4 delegate. Еще и 4 поля и 4 присвоения.
Ну лучше бы выглядел код, с interface, когда так много делегатов передается.
S_S>>Альтернатива только в классе-клиенте private nested класс делать, в нем интерфейс реализуется,
VD>Что-то все очень сложно. Можно просто реализовывать интерфейс или базовый класс во вложенном приватном классе. Все детали останутся в нем, а возвращен будет публичный интерфейс. Возможно я не очень понимаю решаемой задачи.
Я об этом и говорю — во вложенном приватном классе, и в этот вложенный приватный класс передавать ссылку на родительский класс. Компактнее бы это все выглядело как private наследование.
Смысл в том что наружу этот интерфейс не показывается, он передается только агрегированным приватным объектам.
Такое имеется ввиду ( в конструктор Some надо передавать IInterface1):
Было бы private наследование, никому бы не мешало, когда не надо. А здесь бы можно было так:
Зачем вынесен Some из Parent это другой вопрос — этот Some используется в нескольких Parent, и к тому же должен быть в другой более абстрактной сборке.
VD>Делегаты ты в поля кладешь и ничего вроде. Чем интерфейс отличается в данном случае?
Только тем что не так громоздко выглядит, как если: 4 делегата передавать в конструктор. Для этих делегатов имена параметров задать нельзя (иногда это очень плохо) голые Func, хорошо если делегаты без ref,out. Либо явно объявлять 4 delegate. Еще и 4 поля и 4 присвоения.
Ну лучше бы выглядел код, с interface, когда так много делегатов передается.
S_S>>Альтернатива только в классе-клиенте private nested класс делать, в нем интерфейс реализуется,
VD>Что-то все очень сложно. Можно просто реализовывать интерфейс или базовый класс во вложенном приватном классе. Все детали останутся в нем, а возвращен будет публичный интерфейс. Возможно я не очень понимаю решаемой задачи.
Я об этом и говорю — во вложенном приватном классе, и в этот вложенный приватный класс передавать ссылку на родительский класс. Компактнее бы это все выглядело как private наследование.
Смысл в том что наружу этот интерфейс не показывается, он передается только агрегированным приватным объектам.
Такое имеется ввиду ( в конструктор Some надо передавать IInterface1):
class Parent
{
private class Interface1Impl : IInterface1
{
public Interface1Impl(Parent p)
{
_p = p;
}
Parent _p; //Для реализации интерфейса нужен доступ в Parent
}
public Parent()
{
_interface1Impl=new Interface1Impl(this);
_some = new Some(_interface1Impl);
}
private Some _some;
private Interface1Impl _interface1Impl;
}
Было бы private наследование, никому бы не мешало, когда не надо. А здесь бы можно было так:
class Parent: private IInterface1
{
public Parent()
{
_some = new Some(this);
}
private Some _some;
}
Зачем вынесен Some из Parent это другой вопрос — этот Some используется в нескольких Parent, и к тому же должен быть в другой более абстрактной сборке.