Интерфейс не работает если тип - реализующий его класс.
Добавлено: 18.10.2008 20:02:11
Есть класс, унаследованный от TInterfacedObject. TInterfacedObject реализует интерфейс IUnknown, что позволяет автоматически вызывать деструктор, как только объект перестает использоваться (при выходе из области видимости).
В программе пишу:
При этом вот деструктор не вызывается, его надо вызывать вручную, т.е. app.Free(). Ситуация не меняется, если типом объекта я указываю TInterfacedObject. Но дальше я делаю так:
И что же? Деструктор вызывается самостоятельно, как только объект покидает область видимости.
Собственно, вопрос. Так и должно быть или это косяк? Почему если класс реализует интерфейс, то его поведение становится ожидаемым только если я указываю типом сам интерфейс? Получается, если тип - не интерфейс, то и реализации интерфейса не происходит?
- Код: Выделить всё
TApplication = Class(TInterfacedObject)
...
end;
В программе пишу:
- Код: Выделить всё
var
app: TApplication;
begin
app := TApplication.Create();
end.
При этом вот деструктор не вызывается, его надо вызывать вручную, т.е. app.Free(). Ситуация не меняется, если типом объекта я указываю TInterfacedObject. Но дальше я делаю так:
- Код: Выделить всё
var
app: IUnknown;
begin
app := TApplication.Create();
end.
И что же? Деструктор вызывается самостоятельно, как только объект покидает область видимости.
Собственно, вопрос. Так и должно быть или это косяк? Почему если класс реализует интерфейс, то его поведение становится ожидаемым только если я указываю типом сам интерфейс? Получается, если тип - не интерфейс, то и реализации интерфейса не происходит?