C# 动态编译及反射执行
来源:互联网 发布:怎么把淘宝店做起来 编辑:程序博客网 时间:2024/06/06 03:20
C# 动态编译及反射执行
#region 程序集1 无参数、静态类下的静态方法
static void CodeAssembly_1()
{
//提供对 C# 代码生成器和代码编译器的实例的访问。
CSharpCodeProvider provider = new CSharpCodeProvider();
//表示用于调用编译器的参数
CompilerParameters parameter = new CompilerParameters();
//获取当前项目所引用的程序集。
parameter.ReferencedAssemblies.Add("System.dll");
//获取或设置一个值,该值指示是否生成可执行文件。
parameter.GenerateExecutable = false;
//获取或设置一个值,该值指示是否在内存中生成输出。
parameter.GenerateInMemory = true;
//使用指定的编译器设置,从包含源代码的字符串的指定数组,编译程序集。返回编译结果。
CompilerResults result = provider.CompileAssemblyFromSource(parameter,
GetCode_1("120/12"));//将你的式子放在这里
//获取编译器错误和警告的集合
if (result.Errors.Count > 0)
{
Console.WriteLine("动态编译出错了!");
}
else
{
//获取或设置已编译的程序集。
Assembly assembly = result.CompiledAssembly;
//获取当前实例的 Type
Type AType = assembly.GetType("NameSpace_1.Class_1");
//获取类型的方法
MethodInfo method = AType.GetMethod("Func");
//调用方法
Console.WriteLine(method.Invoke(null, null));
}
Console.Read();
}
//获取代码
private static string GetCode_1(string para)
{
StringBuilder codes = new StringBuilder();
//引用
codes.Append("using System; ");
//命名空间定义
codes.Append("namespace NameSpace_1");
codes.Append("{");
//类定义
codes.Append(" public class Class_1");
codes.Append(" {");
//方法定义
codes.Append(" public static object Func()");
codes.Append(" {");
codes.Append(" return (" + para + ");");
codes.Append(" }");
codes.Append(" }");
codes.Append("}");
return (codes.ToString());
}
#endregion
#region 程序集2 含构造函数类需要生成实例对象后调用还参数方法
static void CodeAssembly_2()
{
//提供对 C# 代码生成器和代码编译器的实例的访问。
CSharpCodeProvider provider = new CSharpCodeProvider();
//表示用于调用编译器的参数
CompilerParameters parameter = new CompilerParameters();
//获取当前项目所引用的程序集。
parameter.ReferencedAssemblies.Add("System.dll");
//获取或设置一个值,该值指示是否生成可执行文件。
parameter.GenerateExecutable = false;
//获取或设置一个值,该值指示是否在内存中生成输出。
parameter.GenerateInMemory = true;
//使用指定的编译器设置,从包含源代码的字符串的指定数组,编译程序集。返回编译结果。
CompilerResults result = provider.CompileAssemblyFromSource(parameter, GetCode_2());
//获取编译器错误和警告的集合
if (result.Errors.Count > 0)
{
Console.WriteLine("动态编译出错了!");
}
else
{
//获取或设置已编译的程序集。
Assembly assembly = result.CompiledAssembly;
//获取当前实例的 Type
Type AType = assembly.GetType("NameSpace_2.Class_2");
//动态生成类的实例 含构造函数调用
object assemblyObject = System.Activator.CreateInstance(AType, 100);
//获取类型的方法
MethodInfo method = AType.GetMethod("Plus");
//调用方法
object[] methodParameters = new object[2];
methodParameters[0] = 5.5;
methodParameters[1] = 4.5;
//由于是调用类方法,因此需要指定类实例和方法参数。
Console.WriteLine(method.Invoke(assemblyObject, methodParameters));
}
Console.Read();
}
//获取代码
private static string GetCode_2()
{
StringBuilder codes = new StringBuilder();
//引用
codes.Append("using System; ");
//命名空间定义
codes.Append("namespace NameSpace_2");
codes.Append("{");
//类定义
codes.Append(" public class Class_2");
codes.Append(" {");
//私有成员定义
codes.Append(" private double c = 0.0;");
//构造函数定义
codes.Append(" public Class_2(double c)");
codes.Append(" {");
codes.Append(" this.c = c;");
codes.Append(" }");
//方法定义
codes.Append(" public double Plus(double a, double b)");
codes.Append(" {");
codes.Append(" return (a + b + c);");
codes.Append(" }");
codes.Append(" }");
codes.Append("}");
return (codes.ToString());
}
#endregion
- C# 动态编译及反射执行
- C# 动态编译执行
- c#动态编译反射计算器
- 动态编译执行c#代码
- 动态编译执行C#代码
- 动态编译执行C#代码
- C#动态编译、执行代码
- c# 执行js 动态编译
- C#动态编译、执行代码
- C#动态执行函数:利用反射实现
- C#动态执行函数:利用反射实现
- Java中反射及动态编译
- [转]动态编译执行c#代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 只有 DBA 才能导入由其他 DBA 导出的文件
- 缺失值添加帖子汇总
- xmmintrin.h:34:3: error: #error "SSE instruction set not enabled" 错误
- 运用比例共轭梯度动量算法(trainscg)来训练BP网络
- Output error file to the following location
- C# 动态编译及反射执行
- vs2010下创建win32应用程序
- Thinking in web apps阅读
- 如何用C#动态编译、执行代码
- jquery制作的web qq用户界面
- 百度的产品经理能力如何?
- 批量生成小说目录以及更改一些图片名称
- Java面试题
- C#Thread类—多线程