c#动态生成类
来源:互联网 发布:金庸 知乎 编辑:程序博客网 时间:2024/05/16 19:21
先说说你的功能需求? 真的需要动态创建类吗?
.net 支持动态执行 代码
using System;
using System.Reflection;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Text;
/// <summary>
/// 动态执行代码
/// </summary>
public class Evaluator
{
public static bool GetWhereReturn(string conditionOne, string conditionTwo)
{
// 1.CSharpCodePrivoder 创建编译器实例访问
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
// 2.ICodeComplier 创建编译器的CodeDom树
ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
// 3.CompilerParameters 设置编译器的参数
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll");
objCompilerParameters.GenerateExecutable = false;
objCompilerParameters.GenerateInMemory = true;
// 4.CompilerResults 获取编译器的结果
CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode(conditionOne, conditionTwo));
//判断编译错误是否有错误,如果有直接返回false,否则通过反射读取程序集中的公用方法
if (cr.Errors.HasErrors)
{
return false;
}
else
{
// 通过反射,获取编译器编译的程序集
Assembly objAssembly = cr.CompiledAssembly;
//通过程序集创建对象
object objRun = objAssembly.CreateInstance("Run");
//调用对象中的公有方法
MethodInfo objMI = objRun.GetType().GetMethod("RunCode");
object[] ob = { conditionOne, conditionTwo };
return (bool)objMI.Invoke(objRun, ob);
}
//return false;
}
}
.net 支持动态执行 代码
using System;
using System.Reflection;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Text;
/// <summary>
/// 动态执行代码
/// </summary>
public class Evaluator
{
public static bool GetWhereReturn(string conditionOne, string conditionTwo)
{
// 1.CSharpCodePrivoder 创建编译器实例访问
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
// 2.ICodeComplier 创建编译器的CodeDom树
ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
// 3.CompilerParameters 设置编译器的参数
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll");
objCompilerParameters.GenerateExecutable = false;
objCompilerParameters.GenerateInMemory = true;
// 4.CompilerResults 获取编译器的结果
CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode(conditionOne, conditionTwo));
//判断编译错误是否有错误,如果有直接返回false,否则通过反射读取程序集中的公用方法
if (cr.Errors.HasErrors)
{
return false;
}
else
{
// 通过反射,获取编译器编译的程序集
Assembly objAssembly = cr.CompiledAssembly;
//通过程序集创建对象
object objRun = objAssembly.CreateInstance("Run");
//调用对象中的公有方法
MethodInfo objMI = objRun.GetType().GetMethod("RunCode");
object[] ob = { conditionOne, conditionTwo };
return (bool)objMI.Invoke(objRun, ob);
}
//return false;
}
}
阅读全文
0 0
- C# 动态生成类
- C# 动态生成类
- c#动态生成类
- C#反射、动态生成类
- C#动态生成html
- C#动态生成gridview
- C#动态生成RadioButton
- C#动态生成XML
- c# 动态生成 控件
- C#动态生成控件
- C#动态生成XML
- C# 动态生成Word文档
- 【c#】C#动态生成组件
- C#动态生成文字图片
- C# 后台动态生成textbox
- C#动态生成静态页面
- C#动态生成html页面
- c#动态生成xml文件
- 自然场景下OCR---Andrew Ng组论文
- access数据类型转换
- [kuangbin带你飞]专题一 简单搜索
- 找不到mapper.xml文件
- [Unity] Unity2D 中的物理关节
- c#动态生成类
- NALU简介
- Qt|qobject_cast用法
- adb无法显示Android夜神模拟器解决方案
- 【我的Java笔记】泛型
- c#时间格式
- Notepad++使用和主题更换的一点说明
- 不兼容结构的协调——适配器模式(一)
- MySQL数据库