




















using System;
using System.Data;
using System.Reflection;
using System.Reflection.Emit;
namespace ConsoleApplicationReflection
{
class ClassBuilder
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
try
{
Console.WriteLine("Enter values:");
string numbers = Console.ReadLine();
string[] values = numbers.Split(',');
//生成一个类型,其中包含一个方法(ReturnSum),返回两数相加的结果
Type ClsType = CreateType("OurAssembly", "OurModule", "MathOps", "ReturnSum");//基于反射,生成类型(MathOps)实例
object ClsTypeInstance = Activator.CreateInstance(ClsType);
//基于反射,查找类型(MathOps)中的方法(ReturnSum)
MethodInfo mi = ClsType.GetMethod("ReturnSum");
//方法需要的参数数组
object[] objs = new object[] { Int32.Parse(values[0].ToString()), Int32.Parse(values[1].ToString()) };
//执行方法
object obj = mi.Invoke(ClsTypeInstance, objs);//下面2行代码和上面4行执行的结果一样
//object ClsTypeInstance = Activator.CreateInstance(ClsType);
//object obj = MathOpsClass.InvokeMember("ReturnSum", BindingFlags.InvokeMethod, null, ClsTypeInstance, new object[] { Int32.Parse(values[0].ToString()), Int32.Parse(values[1].ToString()) });
Console.WriteLine("Sum: {0}", obj.ToString());
}
catch (Exception ex)
{
Console.WriteLine("An error occured: {0}", ex.Message);
}
Console.ReadLine();
}
AppDomain domain
= System.Threading.Thread.GetDomain();AssemblyBuilder assBuilder
= domain.DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave);ModuleBuilder mb
= assBuilder.DefineDynamicModule(moduleName);TypeBuilder theClass
= mb.DefineType(className, TypeAttributes.Public | TypeAttributes.Class);
}
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。