実行時に、既存のインターフェイスと同じメンバをすべて使用して、新しいインターフェイスを生成する必要があります。属性パラメータは実行時まで認識されません)。どのように達成することができますか?.NETのReflection.Emitを使用してインターフェイスを生成する
7
A
答えて
8
あなたの質問はあまり具体的ではありません。より多くの情報でそれを更新するならば、私はこの答えをさらに細かく説明します。
ここでは、手動の手順の概要を示します。
- DefineDynamicAssembly とアセンブリを作成
- DefineTypeとタイプを作成DefineDynamicModule
- でモジュールを作成します。あなたのタイプをインターフェースにするには、
TypeAttributes.Interface
を必ず渡してください。 - 元のインターフェイスのメンバーを繰り返し処理し、新しいインターフェイスで同様のメソッドを構築し、必要に応じて属性を適用します。
TypeBuilder.CreateType
を呼び出して、インターフェイスの構築を完了します。動的属性を持つインターフェイスでアセンブリを作成するには
12
:
using System.Reflection;
using System.Reflection.Emit;
// Need the output the assembly to a specific directory
string outputdir = "F:\\tmp\\";
string fname = "Hello.World.dll";
// Define the assembly name
AssemblyName bAssemblyName = new AssemblyName();
bAssemblyName.Name = "Hello.World";
bAssemblyName.Version = new system.Version(1,2,3,4);
// Define the new assembly and module
AssemblyBuilder bAssembly = System.AppDomain.CurrentDomain.DefineDynamicAssembly(bAssemblyName, AssemblyBuilderAccess.Save, outputdir);
ModuleBuilder bModule = bAssembly.DefineDynamicModule(fname, true);
TypeBuilder tInterface = bModule.DefineType("IFoo", TypeAttributes.Interface | TypeAttributes.Public);
ConstructorInfo con = typeof(FunAttribute).GetConstructor(new Type[] { typeof(string) });
CustomAttributeBuilder cab = new CustomAttributeBuilder(con, new object[] { "Hello" });
tInterface.SetCustomAttribute(cab);
Type tInt = tInterface.CreateType();
bAssembly.Save(fname);
次を作成します。
namespace Hello.World
{
[Fun("Hello")]
public interface IFoo
{}
}
方法TypeBuilder.DefineMethodを呼び出すことにより、MethodBuilderクラスを使用の追加。
関連する問題
- 1. Reflection.Emitを使用して静的フィールドを作成する方法
- 2. Explicitインターフェイスの実装とReflection.Emit
- 3. .NETアプリケーションのテンプレートを使用してHTMLを生成する
- 4. .NETコアを使用してハッシュを生成する
- 5. 私はReflection.Emit(TypeBuilder)を使用してこのパターンを実装しようとしているReflection.Emit
- 6. Reflection.Emitを使用してネストされた型を作成する方法
- 7. Reflection.Emitを使用して多次元配列を作成する方法
- 8. Reflection.Emitを使用してコードを生成し、生成されたコードを.csファイルに保存できますか、CodeDomを使用できますか?
- 9. C#.NETを使用したPDF生成
- 10. Reflection.Emitを使用したExpression.Convertと同等
- 11. .NETコアを使用して生成されたクラスライブラリを使用する
- 12. PHPインターフェイスを生成する
- 13. Reflection.Emitを使用して別のオブジェクトからプロパティ値を取得
- 14. .NETコアを使用してxunitで結果レポートテストを生成
- 15. Roslyn CSharpCompilationを使用して.NET標準2.0 DLLを生成
- 16. .NETアプリケーションでPhantom JSを使用してPDFを生成
- 17. .NETでReflection.Emitを使用してハードコーディングされた既存のメソッドを呼び出す
- 18. .NETを使用してセマンティックhtmlを生成するためのアドバイス
- 19. ソルバーオブジェクトのインターフェイスを作成して使用する方法(Z3ソルバー)
- 20. 選択インターフェイスを使用してPython CLIを作成する
- 21. 生成された波形データを使用して.NETでサウンドを再生
- 22. .NET - あなたはインターフェイスを越えてできますか?そしてインターフェイスを使用しない場合は
- 23. ctagsを使用して.netライブラリ(c#)からタグファイルを生成する
- 24. Visual Studio 2008を使用して.netモジュールを生成する方法
- 25. Reflection.Emitの型パラメータとしての放射型の使用
- 26. documentDB .net Rest自動生成IDを使用して文書を作成
- 27. arraylistを使用して要素を追加してインターフェイスを作成する
- 28. 別のインターフェイスでインターフェイスを使用する
- 29. Reflection.Emitとxsdファイルを使用してデータベーステーブルからクラスを生成する際に予想される落とし穴を教えてください。
- 30. .NETを使用して手描きのエフェクトを作成する
ナー、それはクールです。 Reflection.Emitを使う必要はありませんでしたので、誰かが私の邪悪なマスタープランにつまずくブロックを見つけられるかどうかを見たいと思っていました。 –