この質問はこの質問に似ていますが、How do I attach a method to a dynamically-created C# type at runtime?には、私はlooknigの答えが含まれていません。ILを使用せずに、動的に作成されたタイプの既存のC#メソッドを添付
私はタイプを動的に作成し、別のプロジェクトで使用できるダイナミックアセンブリDLLに保存しています。
しかし、私はこの動的型にC#静的メソッドを "attach"してコンストラクタで呼び出す必要があります。 (この方法は少し複雑なので)。
これを行う方法の1つは、別のプロジェクトのC#でメソッドを記述し、それを呼び出すためにリフレクションを動的型で使用することです。しかし、これは、動的タイプが第2のアセンブリと一緒に出荷されなければならないことを意味する。
もう1つの方法は、メソッドを動的に作成し、それにILを書き込むことです。あまりにも多くの努力が必要と思うので、私はこれを避けたいと思います。 C#で書かれた既存のメソッドを取得し、それを動的な型に単にコピーする方法はありますか?
更新
私は現在AssemblyBuilder、およびModuleBuilder.DefineTypeを使用して新しいタイプを作成しています。
MethodInfo.GetMethodBody()。GetILAsByteArray()を使用してMethod Bodyを取得しようとしましたが、MethodBuilder.CreateMethodBody()を使用して新しく定義されたメソッド本体を設定しましたが、何らかの理由で動作しません。私はILコードが〜450バイトしかないことに気付きました。このスペースは、このスペースを使い尽くす文字列リテラルがいくつかあるので、私にとっては小さすぎるようです。私はこの作業をするために必要ないくつかの追加事項があると推測しています。
逆の質問として、タイプ全体を動的アセンブリにコピーできますか?
新しく作成されたタイプに固有の処理は、添付するメソッドで行いますか? – Yahia
ダイナミックタイプを作成するために何を使用していますか? Reflection.Emit? –
これが可能な唯一の方法は仮想メソッドです。つまり、コンストラクタで仮想メソッドを呼び出すことは完全なノー・ノーです。 – leppie