В блоге Алексея Тимохина озвучена хотелка касающаяся поддержки интерфейсов базовыми классами. На мой взгляд, идея весьма спорная, во всяком случае при нынешнем положении дел в языке. Однако, реализовать нечно подобное можно уже сейчас ;) Тут я набросал пример, как это может быть реализовано (intfExtender.pas реализует непосредственно механизм расширения, а unit1.pas содержит два примера). Если кому пригодится, буду только рад ;) Универсальность прикладного кода, о которой говорит Алексей, таким образом можно обеспечить.
p.s. Модуль сильно не тестировался, посему никаких гарантий если что ;)
8 комментариев:
Ого, это же мегакруто!!!
Пример замечательно работает!
Я конечно не понимаю там большую часть, но надеюсь что это временно(хвала директиве PUREPASCAL в System.pas=)).
Спасибо огромное за такой чудесный код!
В смысле, за возможность изучить такой чудесный код. =))
Там нет условий использования, поэтому непонятно, можно ли его использовать и если да, то на каких условиях?
Условия использования Public Domain. Ни каких ограничений :). Код не более чем концепт, для реального использования необходимы некоторые улучшения, например, обязательное делегирование QueryInterface от экстендера к базовому интерфейсу. Можно еще сделать, чтоб экстендеры не создавались на каждый запрос интерфейса, а использовался один экземпляр. Ну и совместимость с мультитредом можно бы обеспечить :)
Кстати, там код:
Pointer(IntfExtenderRecDynArrayPtr) := TIntfExtenderRecDynArray.Create();
Asm
MOV EAX, IntfExtenderRecDynArrayPtr
CALL System.@DynArrayAddRef
End;
можно заменить на:
IntfExtenderRecDynArrayPtr := NIL;
IntfExtenderRecDynArray := TIntfExtenderRecDynArray.Create();
a a Jedi VCL не то же самое со времён этак Delphi 7 делается ля некоторых классов ? Не сравнивали ?
JvEx***.pas ?
Совсем не то же самое ;) Там обычное наследование от стандартных контролов с расширением функционала, а тут расширение функционала непосредственно самих стандартных контролов.
Привет.
А нельзя ли куда-нибудь выложить примерчик (или выслать на AMSafonov(собака)gmail.com)?
По ссылке он уже недоступен, а хотелось изучить идею. Судя по всему идея развития не получила, а жаль :(
Спасибо
Линк на пример не работает. Помогите плз.
https://copy.com/TNlneJxSL8XIJJUA
Отправить комментарий