1

実行時に、インスタンスを作成するオブジェクトのタイプを見つけます。

string typeName = "myNamespace.type, assembly";
Type theType = Type.GetType(typeName);
// the type features a constructor w/o arguments:
object theInstance = Acivator.CreateInstance(theType);

これは正常に機能し、デバッガーですべての属性値を確認できます。デバッガーがリフレクションを使用していると思いますか?

また、オブジェクト型の動的にデシリアライズされたオブジェクトもあります。これは、実際には theType 型であることがわかっています。

// pseudo code on the rhs of the "="
object deserialized = decoder.decode(serializedObject.body);

リフレクションを使用して型の属性をループせずdeserializedに、に割り当てる方法はありますか? theInstanceこれは時間が重要なので、これを行う唯一の方法がリフレクションであると仮定すると、パフォーマンスの低下を最小限に抑える方法はありますか? 私はこれらのオブジェクトの多くを短時間で期待しています。

(これは .Net 3.5 であるため、Type dynamic でこれを解決できたとしても、この場合は役に立ちません)。

4

1 に答える 1

0

最も簡単な方法は、このタイプの 1 つのオブジェクトから別のオブジェクトに属性をコピーするメソッドを作成することです。

static void CopyAttributesOnto(theType dest, theType source)
{
    dest.a = source.a;
    dest.b = source.b;
    // ...
}

// Then you can just do this:
CopyAttributesOnto((theType)theInstance, (theType)deserialized);

別のオプションはDynamicMethod、実行時に を構築し、そこからデリゲートを作成することです。新しいメソッドのリフレクションと JIT コンパイルのコストを 1 回支払うことになりますが、メソッドの呼び出しごとに、他のデリゲートを使用する場合よりも多くのオーバーヘッドが発生することはありません。

于 2013-07-24T14:27:03.493 に答える