2

Reflection.Emitその場で動的アセンブリを生成するために、名前空間の型を使用しています (動的型を含む)。

リフレクションとReflection.Emit名前空間の両方が、CLR 型のメソッドとプロパティを処理するための API を提供します。

私の知る限り、プロパティは C# コンパイラによってメソッドとして実装されているため、動的に発行するときにこれらをどのように処理すればよいのでしょうか?

MethodBuilderまたはを使用してプロパティを発行する必要がありますPropertyBuilderか? DefineMethod(つまり:またはDefineProperty?を呼び出すことによって)

あるアプローチが他のアプローチよりも推奨されるものはありますか?

4

1 に答える 1

4

MethodBuilderまたはを使用してプロパティを発行する必要がありますPropertyBuilderか?

両方。読み書き可能なプロパティがあるX場合、CIL では get メソッド (通常は と呼ばれget_Xます)、set メソッド (通常は と呼ばれます)、および2 つのメソッドを指すset_X適切に呼び出されるとして表されます。X

したがって、Reflection.Emit を使用してプロパティを作成するには、次のことを行う必要があります。

  1. get メソッドを作成するために使用MethodBuilderします (おそらく何らかのフィールドから読み取ります)。
  2. 別のMethodBuilderものを使用して set メソッドを作成します (おそらく同じフィールドに書き込みます)。
  3. を使用PropertyBuilderしてプロパティを作成し、そのプロパティを設定して、およびNameを呼び出します。SetGetMethod()SetSetMethod()

読み取り専用のプロパティを作成する場合は、手順 2 をスキップして、 を呼び出さないでくださいGetSetMethod()

于 2013-08-12T23:05:30.810 に答える