2

C#で動的計画法を実装するオープンソースフレームワークをたくさん見てきました。実際の具象クラスがなくてもインターフェースの実装を生成できるものはありますか?

具体的には、次のようなものがあるとします。

interface IThing {
  int Id { get; set; } 
  string Name { get; set; }
}

また、IThingのインスタンスにマップするオブジェクトもあります。

class Foo {
  public int FooBarId { get; set; }
  public string FooBarName { get; set; }
}

私の架空のヘルパーは私に次のようなものを書かせてくれます:

IThing concreteThing = helper.Implement<IThing, Foo>()
  PropertyGetter(x => x.Id).Returns(foo => foo.FooBarId)
  PropertyGetter(x => x.Name).Returns(foo => foo.FooBarName);

私のふりの例では、私が提供しなかった他のプロパティのセッターに例外スロースタブを配置すると思います...

4

2 に答える 2

1

このを参照してください。Reflectionを使用すると、実装内で可能なすべてのタイプを指定する必要がなくなりますが、他にも欠点があります。

所有者パラメーターは、関数によって期待されるタイプ情報を公開しません。手動で確認する必要があります。リフレクションのオーバーヘッドにより、各呼び出しのパフォーマンスが低下します。反射は保守性を低下させます(方法は別の方法で実装する必要があります)。一部の操作(インデクサーなど)は、Reflectionで処理するのが難しいです。C#のような静的に型指定された言語では、クラスのインターフェイスがサポートされる操作を定義します。サポートされている操作は、指定されたシグニチャを使用してメソッドを呼び出したり、プロパティを取得または設定したり、特定のイベントにアタッチしたりできる場合があります。ほとんどの場合、これは完全に理にかなっています。コンパイラーは、指定されたタイプで操作がサポートされているかどうかを検証できるからです。

于 2013-02-10T10:25:40.037 に答える
1

オープンソースフレームワークImpromptuInterface(nuget内)があり、インターフェイスを指定すると、DLR呼び出しへのスタブが生成されます(再帰的にも)。つまり、 DynamicObjectの実装を使用して、その背後に好きなロジックを追加できます。

于 2013-02-11T17:20:08.503 に答える