public Type CreateType(string assemblyName, string moduleName, string className, string methodName, string[] values)

{
try

{
AssemblyName name = new AssemblyName();
name.Name = assemblyName;

AppDomain domain = System.Threading.Thread.GetDomain();

AssemblyBuilder assBuilder = domain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);

ModuleBuilder mb = assBuilder.DefineDynamicModule(moduleName);

TypeBuilder theClass = mb.DefineType(className, TypeAttributes.Public & TypeAttributes.Class);

Type rtnType = typeof(int);

MethodBuilder method = theClass.DefineMethod(methodName, MethodAttributes.Public, rtnType, null);

ILGenerator gen = method.GetILGenerator();

gen.Emit(OpCodes.Ldc_I4, 0);

for (int i = 0; i < values.Length; i++)

{
gen.Emit(OpCodes.Ldc_I4, int.Parse(values[i]));
gen.Emit(OpCodes.Add);

}
gen.Emit(OpCodes.Ret);
return theClass.CreateType();

}
catch (Exception ex)

{

return null;
}


}

string[] values = new string[]
{ "1", "2", "3", "4" };

Type MathOpsClass = CreateType("OurAssembly","OurModule", "MathOps", "ReturnSum", values);
object MathOpsInst = Activator.CreateInstance(MathOpsClass);
object obj3 = MathOpsClass.InvokeMember("ReturnSum",BindingFlags.InvokeMethod,null,MathOpsInst,null);

Response.Write(obj3.ToString());
posted @
2007-08-17 15:07
永不言败
阅读(
396)
评论()
收藏
举报