2

インターフェイスを満たすメソッド/プロパティの存在を確認することで、動的型付けを使用してインターフェイスを適用するRubyのメソッドの準備が整いました。

これは、インターフェースを使用するよりも全体的にどのように優れた設計原則ですか?長所/短所は何ですか。たとえば、C#で同じ概念を実装できますが、同じ値になるかどうかはわかりませんが、

public class Foo
{
   public Foo(dynamic _obj)
   {
        MethodInfo[] methods= _obj.GetType().GetMethods();

        if (!methods.Any(x => x.Name == "SomeRequiredMethod")
        {
            throw new ArgumentException("Object does not meet interface requirements.");
        }
   }

   // proceed with functionality that requires the method
}

もちろん、これを拡張して、署名やリターンタイプなど、名前だけでなくチェックすることもできます。

考え?

4

1 に答える 1

1

このアプローチにはいくつかの大きな問題があります。

  1. 反射が遅い
  2. 動的呼び出しは、強く型付けされた呼び出しよりもはるかに低速です
  3. コードはもっと複雑です

そして、おそらく非常に特定のニーズを除いて、私はどんな利点も見ることができません...

C#は静的で強い型の言語として設計されており、現在は動的な機能がいくつかありますが、強い型の代替手段がない場合にのみ使用する必要があります。

オブジェクトを本当に動的に使用する必要がある場合は、メンバーを手動でチェックしないでください。代わりに、コードをtryブロックに入れて、RuntimeBinderException呼び出したメンバーが見つからない場合に発生することをキャッチしてください。

于 2011-08-24T23:00:41.763 に答える