手机
当前位置:查字典教程网 >编程开发 >C#教程 >c#动态编译执行对象方法示例 运用映射机制创建对象
c#动态编译执行对象方法示例 运用映射机制创建对象
摘要:C#是一种编译型的语言,程序执行,首先要经过编译器编译,如何让C#像一种脚本一样,在要执行的时候,进行编译,这里,我们可以用Microsof...

C#是一种编译型的语言,程序执行,首先要经过编译器编译,如何让C#像一种脚本一样,在要执行的时候,进行编译,这里,我们可以用Microsoft.CSharp空间下的CSharpCodeProvider提供类,来达到动态编译的效果。在这里,我新建一个控制台程序,在Program.cs类里引用using System.CodeDom.Compiler;

using System.Reflection;using Microsoft.CSharp;三大命名空间

复制代码 代码如下:

#region using directiry

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.CodeDom;

using System.CodeDom.Compiler;

using System.Reflection;

using Microsoft.CSharp;

#endregion

/*==============================================================================

*

* author:lichaoqiang@163.com

* link:http://my.oschina.net/lichaoqiang

*

*

* ============================================================================*/

namespace CodeDom

{

class Program

{

#region 主程序入口

/// <summary>

///主程序入口

/// </summary>

/// <param name="args"></param>

static void Main(string[] args)

{

//1>实例化C#代码服务提供对象

CSharpCodeProvider provider = new CSharpCodeProvider();

//2>声明编译器参数

CompilerParameters parameters = new CompilerParameters();

parameters.GenerateExecutable = false;

parameters.GenerateInMemory = true;

try

{

//3>动态编译

CompilerResults result = provider.CompileAssemblyFromSource(parameters, BuildCSharpCode());

if (result.Errors.Count > 0)

{

Console.Write("编译出错!");

}

//4>如果编译没有出错,此刻已经生成动态程序集LCQ.LCQClass

//5>开始玩C#映射

Assembly assembly = result.CompiledAssembly;

object obj = assembly.CreateInstance("LCQ.LCQClass");

Type type = assembly.GetType("LCQ.LCQClass");

//6>获取对象方法

MethodInfo method = type.GetMethod("Sum");

object[] objParameters = new object[2] { 1, 5 };

int iResult = Convert.ToInt32(method.Invoke(obj, objParameters));//唤醒对象,执行行为

Console.Write(iResult);

Console.Read();

}

catch (System.NotImplementedException ex)

{

Console.Write(ex.Message);

}

catch (System.ArgumentException ex)

{

Console.Write(ex.Message);

}

catch (Exception ex)

{

Console.Write(ex.Message);

}

}

#endregion

#region 生成代码块

/// <summary>

/// 生成代码块

/// </summary>

/// <returns></returns>

private static string BuildCSharpCode()

{

string fileName = AppDomain.CurrentDomain.BaseDirectory.Replace("Debug", string.Empty).Replace("Release", string.Empty) + "CodeFile.cs";

string strCodeDom = File.ReadAllText(fileName);

return strCodeDom;

}

#endregion

}

}

【c#动态编译执行对象方法示例 运用映射机制创建对象】相关文章:

C# 面向对象的基本原则

PowerShell 定时执行.Net(C#)程序的方法

C#难点逐个击破(4):main函数

C#启动windows服务方法的相关问题分析

C#对象与XMl文件之间的相互转换

C# 游戏外挂实现核心代码

c#启动EXE文件的方法实例

c#剪切板操作的简单实例

C#操作数据库总结(vs2005+sql2005)

c#动态调用Webservice的两种方法实例

精品推荐
分类导航