/
EugenyCh7
/
CodeDOMTest
Обзор
Документация
Войти
/
EugenyCh7
/
CodeDOMTest
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
InstructionEncoderTest
OpCodesEmit/Program.cs
31 строка
1 KB
eugenych
fix
04 авг 2023, 21:25
04 авг 2023, 21:25
f3eb43e
Код
Авторство
О чём код?
using System.Reflection; using System.Reflection.Emit; namespace EmitMethodSample { internal class Program { private static void Main(string[] args) { AssemblyName asmName = new AssemblyName("MyAssembly"); AssemblyBuilder builder = AssemblyBuilder.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run); ModuleBuilder mbuilder = builder.DefineDynamicModule("MyModule"); TypeBuilder tbuilder = mbuilder.DefineType("MyClass", TypeAttributes.Public); MethodBuilder methodSum = tbuilder.DefineMethod("Square", MethodAttributes.Public | MethodAttributes.Static, typeof(int), new[] { typeof(int) }); ILGenerator generator = methodSum.GetILGenerator(); generator.Emit(OpCodes.Ldarg_0); generator.Emit(OpCodes.Ldarg_0); generator.Emit(OpCodes.Mul); generator.Emit(OpCodes.Ret); Type thistype = tbuilder.CreateType(); MethodInfo info = thistype.GetMethod("Square", BindingFlags.Public | BindingFlags.Static)!; object result = info.Invoke(null, BindingFlags.Public | BindingFlags.Static, null, new object[] { 12 }, Thread.CurrentThread.CurrentCulture)!; Console.WriteLine("Square of 12 : {0}", result); } } }