Чем плоха конструкция:
-- расскажу позже.
В двух словах - можно получить от ОДНОГО объекта две ссылки на ImyInterface, которые будут вести себя по-разному.
Например так:
или так:
ImyInterface = interface(IUnknown) end;//ImyInterface TA = class(TInterfacedObject, ImyInterface) end;//TA TB = class(TA, ImyInterface) end;//TB
-- расскажу позже.
В двух словах - можно получить от ОДНОГО объекта две ссылки на ImyInterface, которые будут вести себя по-разному.
Например так:
function TA.SomeMethod: ImyInterface; begin Result := Self; end; ... var l_X : TB; l_A : ImyInterface; l_B : ImyInterface; begin l_X := TB.Create; l_A := l_X.SomeMethod; l_B := l_X As ImyInterface; Assert(l_A = l_B, 'Улыбайтесь пошире и удивляйтесь :-)'); end;
или так:
var l_X : TA; l_A : ImyInterface; l_B : ImyInterface; begin l_X := TB.Create; l_A := l_X; l_B := l_X As ImyInterface; Assert(l_A = l_B, 'Улыбайтесь пошире и удивляйтесь :-)'); end;
Комментариев нет:
Отправить комментарий