Конференция "Прочее" » Когда же наконец в Delphi for Win32 появятся дженерики
 
  • oxffff © (15.04.08 15:29) [40]

    >  А тут как получается?


    Здесь очень хорошо это получается. А именно.

    ACLASS=class
    procedure MethodOfClassA();
    end;

    BCLASS=class
    procedure MethodOfClassB();
    procedure MethodOfClassC();
    end;

    ContractA=interface
    ['{F0B051B7-755B-481D-817C-A78BE6AABDAB}']
    procedure MethodOfClassA();
    end;

    ContractB=interface
    ['{2D6EAFD0-3CA8-495D-98A9-95ED3F4A1906}']
    procedure MethodOfClassC();
    procedure MethodOfClassB();
    end;

    CClass=class(TinterfacedObject,ContractA,ContractB)
    InstanceA:ACLASS;
    InstanceB:BCLASS;
    protected
    procedure MethodOfClassCLocal();
    procedure ContractB.MethodOfClassC=MethodOfClassCLocal;


    property InstanceARef:ACLASS read InstanceA implements ContractA;
    property InstanceBRef:BCLASS read InstanceB implements ContractB;
    public
    constructor create;
    destructor destroy;override;
    end;
  • oxffff © (15.04.08 15:32) [41]

    > Гы. А указатели и ссылки для кого придуманы? :) И целый
    > зоопарк смартпоинтеров туда же.


    А что их тоже можно наследовать?

    Я поэтому и написал, что это ручками.
  • Alkid © (15.04.08 15:32) [42]
    Т.е. это:

    > procedure ContractB.MethodOfClassC=MethodOfClassCLocal;


    Перекрывает это:

    > property InstanceBRef:BCLASS read InstanceB implements ContractB;


    да?

    Симпатичненько получается.
  • vuk © (15.04.08 15:33) [43]
    oxffff ©   (15.04.08 14:32) [20]:
    >Вы про ключевое слово implements в Delphi слышали?
    Не только слышал но и использовал. И знаю, как оно работает. :)

    to Alkid ©   (15.04.08 15:25) [38]:
    >В принципе, виртуальное наследование в С++
    >решает подобную проблему. А тут как получается?
    Нет.
  • oxffff © (15.04.08 15:36) [44]

    > Не только слышал но и использовал. И знаю, как оно работает.
    >  :)


    Так привидите пример, что нельзя сделать в Delphi нельзя множественное наследование(подмешивание реализации с жизненным циклом совпадающим с агрегатом).

    А я вам покажу как это сделать. :)
  • Alkid © (15.04.08 15:36) [45]

    > Нет.

    Что нет?
    "Нет", в смысле, что тут никак не получается
    или "Нет", в смысле, что виртуальное наследование в с++ не позвонляет использовать миксины?
  • jack128_ (15.04.08 15:37) [46]

    > procedure MethodOfClassCLocal();procedure ContractB.MethodOfClassC=MethodOfClassCLocal;


    кста, в старших дельфях(в 2007 по крайней мере) - есть глюки, связанные с такой конструкцией.  Дельфя - никак не хотела понимать, что СontractB.MethodOfClassC реализуется методом MethodOfClassCLocal, а не тем классом, который в implements сидит.
  • oxffff © (15.04.08 15:42) [47]

    > Alkid ©   (15.04.08 15:32) [42]


    Более того можно менять семантику копирования агрегируемого RefCount, External RefCount, NoRefCount на лету.  Все больше ничего не скажу (это мой секрет).  :)
  • Alkid © (15.04.08 15:44) [48]

    > Более того можно менять семантику копирования агрегируемого
    > RefCount, External RefCount, NoRefCount на лету.  Все больше
    > ничего не скажу (это мой секрет).  :)

    Вах-вах!
    Но вообще, скажем прямо, эта возможность выглядит в дельфи несколько инородно, учитывая что базовая библиотека классов опирается на традиционную гомогенную иерархию классов. Возникает ощущение, что либо "направление развития" языка сильно (кардинально) меняется, либо фитчи начинают добавлять вообще без всякой системы.
  • oxffff © (15.04.08 15:51) [49]

    > Но вообще, скажем прямо, эта возможность выглядит в дельфи
    > несколько инородно, учитывая что базовая библиотека классов
    > опирается на традиционную гомогенную иерархию классов.


    Наследование есть и остается одиночным. Но существуют способы расширить реализацию по другому.

    >Вах-вах!

    Полный Вах-вах был когда я этот свой код отлаживал в отладчике. :)
    Потом нашел поменял две строчки местами и все заработало.
  • Kolan © (15.04.08 15:53) [50]
    > анонимные функции.

    Понял, кажется такое есть в Ruby
  • Kolan © (15.04.08 15:54) [51]
    Кортежи (tuples)
    Тоже понял.  Вполне логичное название в рел. субд тоже используются.

    ХЗ как все это может пригодится…
  • Alkid © (15.04.08 15:55) [52]

    > Наследование есть и остается одиночным. Но существуют способы
    > расширить реализацию по другому.

    Дело в том, что этот механизм несколько "конкурирует" с наследованием. :)
    Если брать выше, то он представляет собой серьёзную архитектурную альтернативу гомогенным иерархиям, которые традиционны для Дельфи.
    ИМХО, дельфи теряет в стройности от этого.
  • oxffff © (15.04.08 16:00) [53]

    > ИМХО, дельфи теряет в стройности от этого.


    Время покажет. Судить не нам.
 
Конференция "Прочее" » Когда же наконец в Delphi for Win32 появятся дженерики
Есть новые Нет новых   [134435   +33][b:0][p:0.001]