Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Прерывание наследования.


Автор: CROTishka 2.11.2010, 10:17
напомните пожалуйста синтаксис для прерывания наследования в делфи, и есть ли такой вообще.

Автор: БелАмор 2.11.2010, 13:07
Если мне не изменят память, в последних версиях Delphi появилось ключевое слово final, которое запрещает наследование от этого класса.

Автор: CROTishka 3.11.2010, 13:36
Нет, не финализирование, а именно прерывание - чтобы TChild is TParent возвращал фолс. Такое возможно в делфи?

Автор: Alexeis 3.11.2010, 14:03
Цитата(CROTishka @  3.11.2010,  14:36 Найти цитируемый пост)
а именно прерывание - чтобы TChild is TParent возвращал фолс. Такое возможно в делфи? 

  Но при этом наследовал все что есть у TParent ?

Автор: CROTishka 3.11.2010, 15:02
Ну конечно! smile

Автор: Alexeis 3.11.2010, 15:24
Самый простой способ это поместить предка внутрь в качестве отдельного поля-объекта. Более сложный у текущего метакласса найти место где расположен адрес метакласса предка записать вместо адреса метакласса предка что угодно

Вот например кусок кода из System для получения ссылки на метакласс передка
Код

class function TObject.ClassParent: TClass;
{$IFDEF PUREPASCAL}
begin
  Pointer(Result) := PPointer(Integer(Self) + vmtParent)^;
  if Result <> nil then
    Pointer(Result) := PPointer(Result)^;
end;

Автор: CROTishka 3.11.2010, 15:36
Ну, ртти я могу надурить, это не сложно. 
Просто помнится года 2-4 назад читал статью какую-то про то, как писать контейнер компонентов, и там в качестве примера было настедование транспортное средство->4ехколесное ТС->машина->Москвич, или что-то такое, а потом они брали и мотоцикл наследовали от ТС и отделяли штатными средствами языка (вроде), чтобы его туда же положить нельзя было.
Хоть убей не вспомню, где это читал, и делфикингдом лежит - не поискать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)