Dynamic Interface (or Strong "Duck Typing")

[id:soutaro:20050921:1127300721]経由で知りました。
http://msdn.microsoft.com/vbasic/future/default.aspx?pull=/library/en-us/dnvs05/html/vb9overview.asp#vb9overview_topic12
VB9から使えるようになるようですよ。

      • -

ダウンキャストのことを考えなければ、静的な言語でも、動的なインターフェースを下のように真似できるのですが、ダウンキャストがあるとこういうことはできないので、動的なメソッド探索を行えないと真似はできないんだろうな。

type
  TAnObject = class
    function CalcSomething(x: Integer): Integer;
    procedure DoSomething;
    function ToString: string;
  end;

  TAnInterface = class
    CalcSomething: function (x: Integer): Integer of object;
    DoSomething: procedure of object;
  end;

...
var
  obj : TAnObject;
  intf: TAnInterface;
...
  intf.CalcSomething = obj.CalcSomething;
  intf.DoSomething = obj.DoSomething;

  AnProcedureThatNeedsInterface(intf);
...