-
Как описать класс, у которого в зависимости от переменной разные предки? Например: var OwnerSelect: Integer = 0;
если OwnerSelect = 0 то MyClass = class(TOwner1) иначе MyClass = class(TOwner2)
Возможно ли такое вообще?
-
На этапе компиляции - да.
-
Именно на этапе выполнения. То есть в зависимости от переменной класс будет иметь различные свойства.
-
> [1] novill © (21.12.06 13:19) Для компонента некорректно. Не читать.
-
Никак, разве что TOwner1 = class(TMainOwner) иначе TOwner2 = class(TMainOwner)
-
Хмык. Создай класс-предок. От него два потомка. Объявляешь переменную типа Предок, экземпляр создаёшь типа Потомок в зависимости от условия. Ещё можешь в сторону интерфейсов посмотреть.
-
В дополнение к тов. Чапаеву: М.б., подъюзать конструкцию class of ?
-
В ЯП нет множественного наследования, пооэтому условного run-time наследования от него можно не ожидать
-
> [5] Чапаев © (21.12.06 13:36) > Хмык. Создай класс-предок.
Даже и создавать ничего не нужно. Общий наследник уже в любом случае есть — TObject :)
-
Это можно сделать, но есть нюансы. У предков должен быть один и тот же интерфейс. Тогда получится, что твой класс-наследник является фабрикой классов (есть отличный паттерн "Фабричный метод"), который создает экземпляры различных классов с общим интерфейсом. Я так понимаю, задача иметь возможность переключения реализации методов при сохранении самих методов и свойств. С этим прекрасно справлются паттерны проектирования (Фабрика классов, Фабричный метод, Строитель).
-
> Я так понимаю, задача иметь возможность переключения реализации > методов при сохранении самих методов и свойств.
А я так понимаю, задаяа иметь возможность переключения существования методов и свойств без сохранения методов и свойств:
> То есть в зависимости от переменной класс будет иметь различные > свойства.
Реализация этого требует run-time наследования и перенесения многих проверок также в run-time, если бы процессор был очень гибким и быстрым компилятором высокого уровня, а не низкоуровневой "битодробилкой", то такое может бы и прокатило, вобщем, чтобы добиться скорости от такого кода, нужно либо компилировать все возможные варианты одного и того же кода, который работает с классом такого "условного типа" в compile-time, либо делать run-time checks, первое - память, второе - время, можно ещё делать первое в run-time, но тогда нужно иметь с собой хотя бы узкоспециализированный компилятор Это может работать, но не в Pascal от Borland
|