Информация об изменениях

Сообщение 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):
    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):
    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, и к тому же должен быть в другой более абстрактной сборке.