Goがインターフェイスをどのように処理するかを見て気に入った後、C#で次のような同様のダックタイピングを実現する方法について考え始めました。
var mallard = new Mallard(); // doesn't implement IDuck but has the right methods
IDuck duck = DuckTyper.Adapt<Mallard,IDuck>(mallard);
このDuckTyper.Adapt
メソッドはSystem.Reflection.Emit
、その場でアダプターを作成するために使用します。多分誰かがすでにこのようなものを書いています。モックフレームワークがすでに行っていることとそれほど変わらないと思います。
ただし、実際に適切なメソッドMallard
がない場合、実行時に例外がスローされます。IDuck
コンパイル時の早い段階でエラーを取得するには、MallardToDuckAdapter
回避しようとしているものとまったく同じものを作成する必要があります。
もっと良い方法はありますか?
編集:どうやら私が「安全なダックタイピング」と呼ぶものの適切な用語は構造的タイピングです。