2

私は最近、Java や C# のような言語で、メソッドのパラメーターの型として「ダック」型を含めることは、構文糖衣の良い形になるだろうかと考えていました。これは次のようになります。

void myFunction(duck foo) {
   foo.doStuff();
}

これは、リフレクションを介して doStuff() を呼び出すためのシンタックス シュガーになるか、別の方法で実装される可能性があります。Foo はどのタイプでもかまいません。foo に doStuff() メソッドがない場合、実行時例外がスローされます。要点は、必要なときに、つまりほとんどの場合、事前に指定されたより厳密なインターフェイス パラダイム (パフォーマンス、エラー チェック) の利点が得られるということです。同時に、ダッキング タイピングへのシンプルできれいに見えるバックドアができ、大規模なリファクタリングを行わなくても、初期設計では予期されていなかった変更をきれいに行うことができます。さらに、100% 後方互換性があり、既存の言語構造と完全に調和する可能性があります。これは、API を混乱させ、乱雑にする原因となる過度に設計された場合に備えたプログラミング スタイルを削減するのに役立つと思います。

4

3 に答える 3

6

キーワードはこれらのdynamic正確なセマンティクスをサポートし、C# 4.0 になります。

しかし、それは反省のためだけではありません。これは、他のメカニズムが使用できない場合にのみリフレクションを使用する動的ディスパッチの実装です。

この質問にも多くの良い情報があります。

于 2008-11-22T18:41:26.140 に答える
1

私の簡単な答えは、「はい、ダック タイピングは OO 言語で便利なツールになるものです。C# チームは同意し、C# 4.0 に取り入れています」です。

長い答え:

ダックタイピングには長所と短所があります...完全に否定する人がたくさんいますが、私はあなたにそれを教えます.その他の場合。

IDictionary の代わりに Dictionary を使用するインターフェイスに関する私の投稿を参照してください。ダック タイピングがあれば問題は解決します。

http://www.houseofbilz.com/archive/2008/09/22/why-you-really-need-to-think-about-your-interfaces.aspx

C# には 1.0 以降、いくつかのダック タイピングが組み込まれています。たとえば、foreach キーワードを考えてみましょう。foreach ループでオブジェクトを使用するには、型が IEnumerable である必要があるというのはよくある誤解です。実際、これは正しくないことがわかります。GetEnumerator() を実装するだけでよく、インターフェイスを実装する必要はありません (しかし、それは良い形です)。ダックタイピングです。

于 2008-11-22T18:58:13.907 に答える
1

実際、これは C#4 の一部となる「動的」型に非常によく似ています。

于 2008-11-22T18:41:56.967 に答える