0

この質問はおそらく何百回も聞かれましたが、繰り返しになりますが、.NETにはクラスローダーの概念があります。そして、問題を詳しく説明します。開発するフレームワークにこのクラスのオブジェクトをプラグインできるようにするために必要ないくつかの追加のコード項目をクラスに挿入したくありません。

Javaでは、バイトコードを読み取り、必要な変更を適用し、クラスを型インスタンスとしてアプリケーションに提供するクラスローダーを使用してこれを行います。これで、リフレクションによってオブジェクトを作成できます。

これは、リフレクションとして、.NETでも確かに可能です。したがって、Type :: GetType()を使用すると、現在のAppDomainインスタンスのTypeResolverが呼び出されます。リゾルバ内で、元の型がロードされ、動的アセンブリで作成された派生型の基本クラスとして使用されます。派生型が同じアセンブリにないため、内部クラスの処理が簡単ではないため、少し注意が必要です。しかし、それは実行可能で安定しています。

そして今、私を衒学者のドイツ語と呼んでください。私は元の型と派生型をロードしていますが、Javaでは変更された型だけを持っています。これを.NETでも機能させることはできますか?

4

1 に答える 1

0

ここでハウスキーピングを行うために、この問題で何が起こったのかを説明します。

実際、ロード時に既存のクラスを変更するアプローチを軽蔑しました。.NETの観点からは、所有者が拡張されているタイプに設定されているDynamicMethodがうまくいきます。ただし、この方法でデータオブジェクトを追加することはできません。それが必要な場合は、Reflection.TypeBuilderによって独自のクラスを派生させる必要があります。両方の概念は、.Net Standard(以前のPCL)では使用できません。

同様の要件がある場合は、DLR(Dynamic Meta Objects)に連絡することを強くお勧めします。これが私がついに使用し始めた概念です。

于 2018-06-24T07:43:19.487 に答える