Приведение объекта к типу интерфейса без TInterfacedObject в качестве базового класса

Мне нужен интерфейс реализации класса без подсчета ссылок. Я сделал следующее:

  IMyInterface = interface(IInterface)
      ['{B84904DF-9E8A-46E0-98E4-498BF03C2819}'] 
      procedure InterfaceMethod;
  end;

  TMyClass = class(TObject, IMyInterface)
  protected
      function _AddRef: Integer;stdcall;
      function _Release: Integer;stdcall;
      function QueryInterface(const IID: TGUID; out Obj): HResult;stdcall;
  public
      procedure InterfaceMethod;
  end;

  procedure TMyClass.InterfaceMethod;
  begin
      ShowMessage('The Method');
  end;

  function TMyClass.QueryInterface(const IID: TGUID; out Obj): HResult;
  begin
      if GetInterface(IID, Obj) then
          Result := 0
      else
          Result := E_NOINTERFACE;
  end;

  function TMyClass._AddRef: Integer;
  begin
      Result := -1;
  end;

  function TMyClass._Release: Integer;
  begin
      Result := -1;
  end;

Отсутствие подсчета ссылок работает нормально. Но меня беспокоит то, что я не могу броситьTMyClass вIMyInterface с помощьюas оператор:

var
  MyI: IMyInterface; 
begin
  MyI := TMyClass.Create as IMyInterface;

Мне дают

[Ошибка DCC] E2015 Оператор не применим к этому типу операнда

Проблема исчезает, когдаTMyClass происходит отTInterfacedObject Т.е. я могу делать такое приведение без ошибки компилятора. Очевидно, что я не хочу использовать TInterfacedObject в качестве базового класса, поскольку это сделает мою ссылку на класс подсчитанной. Почему такой кастинг запрещен и как его обойти?

Ответы на вопрос(1)

Ваш ответ на вопрос