123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- { %fail }
- {$ifdef fpc}{$mode objfpc}{$H+}{$endif}
- uses
- Classes;
- type
- IIntf1 = interface
- ['{87776F0F-8CE0-4881-B969-C76F5A9CA517}']
- procedure M1;
- end;
- IIntf2 = interface
- ['{923C47DF-0A7E-4698-98B8-45175306CDF2}']
- procedure M2;
- end;
- { TObjIntf2 }
- TObjIntf2 = class(TInterfacedObject, IIntf2)
- procedure M2;
- end;
- { TObj }
- TObj = class(TInterfacedObject, IIntf1, IIntf2)
- private
- FObjIntf2:IIntf2;
- public
- constructor Create;
- procedure M1;
-
- property I2:IIntf2 read FObjIntf2 implements IIntf2;
- // method resolution after delegation, forbidden
- procedure IIntf2.M2 = _M2;
- procedure _M2;
- end;
- { TObjIntf2 }
- procedure TObjIntf2.M2;
- begin
- Writeln('TObjIntf2.M2 called');
- end;
- { TObj }
- constructor TObj.Create;
- begin
- FObjIntf2:=TObjIntf2.Create;
- end;
- procedure TObj.M1;
- begin
- Writeln('TObj.M1 called');
- end;
- procedure TObj._M2;
- begin
- Writeln('TObj.M2 called');
- end;
- var O:TObj;
- i1:IIntf1;
- i2:IIntf2;
- begin
- O:=TObj.Create;
- i1:=O;
- //all tries are unsuccessful
- i2:=O as IIntf2;
- //(O as IIntf1).QueryInterface(IIntf2, i2);
- // i1.QueryInterface(IIntf2, i2);
- //still calls TObj1.M1
- i2.M2;
- end.
|