Конференция "Компоненты" » Компонента с разными предками [D6, WinXP]
 
  • avsam © (21.12.06 12:55) [0]
    Как описать класс, у которого в зависимости от переменной разные предки?
    Например:
    var
     OwnerSelect: Integer = 0;

    если OwnerSelect = 0 то
    MyClass = class(TOwner1)
    иначе
    MyClass = class(TOwner2)

    Возможно ли такое вообще?
  • novill © (21.12.06 13:19) [1]
    На этапе компиляции - да.
  • avsam © (21.12.06 13:20) [2]
    Именно на этапе выполнения.
    То есть в зависимости от переменной класс будет иметь различные свойства.
  • novill © (21.12.06 13:21) [3]
    > [1] novill ©   (21.12.06 13:19)
    Для компонента некорректно. Не читать.
  • DimaBr (21.12.06 13:35) [4]
    Никак, разве что
    TOwner1 = class(TMainOwner)
    иначе
    TOwner2 = class(TMainOwner)
  • Чапаев © (21.12.06 13:36) [5]
    Хмык. Создай класс-предок. От него два потомка. Объявляешь переменную типа Предок, экземпляр создаёшь типа Потомок в зависимости от условия. Ещё можешь в сторону интерфейсов посмотреть.
  • vlad-mal © (04.01.07 15:57) [6]
    В дополнение к тов. Чапаеву:
    М.б., подъюзать конструкцию
    class of


    ?
  • ors_archangel © (04.01.07 16:58) [7]
    В ЯП нет множественного наследования, пооэтому условного run-time наследования от него можно не ожидать
  • Джо © (04.01.07 17:16) [8]
    > [5] Чапаев ©   (21.12.06 13:36)
    > Хмык. Создай класс-предок.

    Даже и создавать ничего не нужно. Общий наследник уже в любом случае есть — TObject :)
  • nomshar © (05.01.07 01:58) [9]
    Это можно сделать, но есть нюансы.
    У предков должен быть один и тот же интерфейс. Тогда получится, что твой класс-наследник является фабрикой классов (есть отличный паттерн "Фабричный метод"), который создает экземпляры различных классов с общим интерфейсом.
    Я так понимаю, задача иметь возможность переключения реализации методов при сохранении самих методов и свойств.
    С этим прекрасно справлются паттерны проектирования (Фабрика классов, Фабричный метод, Строитель).
  • ors_archangel © (05.01.07 13:26) [10]

    > Я так понимаю, задача иметь возможность переключения реализации
    > методов при сохранении самих методов и свойств.

    А я так понимаю, задаяа иметь возможность переключения существования методов и свойств без сохранения методов и свойств:

    > То есть в зависимости от переменной класс будет иметь различные
    > свойства.

    Реализация этого требует run-time наследования и перенесения многих проверок также в run-time, если бы процессор был очень гибким и быстрым компилятором высокого уровня, а не низкоуровневой "битодробилкой", то такое может бы и прокатило, вобщем, чтобы добиться скорости от такого кода, нужно либо компилировать все возможные варианты одного и того же кода, который работает с классом такого "условного типа" в compile-time, либо делать run-time checks, первое - память, второе - время, можно ещё делать первое в run-time, но тогда нужно иметь с собой хотя бы узкоспециализированный компилятор
    Это может работать, но не в Pascal от Borland
 
Конференция "Компоненты" » Компонента с разными предками [D6, WinXP]
Есть новые Нет новых   [118652   +8][b:0][p:0.001]