Advertisement
SirRufo

so_26991022

Nov 18th, 2014
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.88 KB | None | 0 0
  1. program so_26991022;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. uses
  7.   System.SysUtils;
  8.  
  9. type
  10.   IParent = interface
  11.     ['{B2BEC2DA-79CA-4A2A-952C-8A68D85F62EF}']
  12.     procedure Foo;
  13.   end;
  14.  
  15.   IChild = interface( IParent )
  16.     ['{47F088C9-5606-4E53-841A-6C632B5424F2}']
  17.     procedure Bar;
  18.   end;
  19.  
  20.   TImplementer = class( TInterfacedObject, IParent, IChild )
  21.   private
  22. {$REGION 'IParent'}
  23.     procedure Parent_Foo;
  24. {$REGION 'IParent method routing'}
  25.     procedure IParent.Foo = Parent_Foo;
  26. {$ENDREGION}
  27. {$ENDREGION}
  28. {$REGION 'IChild'}
  29.     procedure Child_Foo;
  30.     procedure Child_Bar;
  31. {$REGION 'ICHild method routing'}
  32.     procedure IChild.Foo = Child_Foo;
  33.     procedure IChild.Bar = Child_Bar;
  34. {$ENDREGION}
  35. {$ENDREGION}
  36.   end;
  37.  
  38.   { TImplementer }
  39.  
  40. procedure TImplementer.Child_Bar;
  41. begin
  42.   WriteLn( 'Child Bar' );
  43. end;
  44.  
  45. procedure TImplementer.Child_Foo;
  46. begin
  47.   WriteLn( 'Child Foo' );
  48. end;
  49.  
  50. procedure TImplementer.Parent_Foo;
  51. begin
  52.   WriteLn( 'Parent Foo' );
  53. end;
  54.  
  55. procedure WorkWithParent( AParent: IParent );
  56. begin
  57.   WriteLn( 'Call WorkWithParent:' );
  58.   AParent.Foo;
  59. end;
  60.  
  61. procedure WorkWithChild( AChild: IChild );
  62. begin
  63.   WriteLn( 'Call WorkWithClient:' );
  64.   AChild.Foo;
  65.   AChild.Bar;
  66. end;
  67.  
  68. procedure Test;
  69. var
  70.   LInstance: IInterface;
  71.   LParent: IParent;
  72.   LChild: IChild;
  73. begin
  74.   LInstance := TImplementer.Create;
  75.  
  76.   if Supports( LInstance, IParent, LParent )
  77.   then
  78.     // Call WorkWithParent:
  79.     // Parent Foo
  80.     WorkWithParent( LParent );
  81.  
  82.   if Supports( LInstance, IChild, LChild )
  83.   then
  84.     begin
  85.       // Call WorkWithClient:
  86.       // Child Foo
  87.       // Child Bar
  88.       WorkWithChild( LChild );
  89.       // Call WorkWithParent:
  90.       // Child Foo
  91.       WorkWithParent( AChild );
  92.     end;
  93. end;
  94.  
  95. begin
  96.   try
  97.     Test;
  98.   except
  99.     on E: Exception do
  100.       WriteLn( E.ClassName, ': ', E.Message );
  101.   end;
  102.   ReadLn;
  103.  
  104. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement