c#动态编译执行对象方法示例 运用映射机制创建对象
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
}
}
相关文章
ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD
vbs调用插件报:ActiveX部件不能创建对象,代码:800A01AD,一般是因为病毒导致dll文件丢失或者64系统问题导致,需要的朋友可以参考下...2020-06-30- 一个控制台例子, 演示了如何用 C# 动态的生成代码, 编译代码, 最后执行...2020-06-25
- 8中javascript创建对象(类)的方法,依依介绍给大家,希望大家喜欢。1. 使用Object构造函数来创建一个对象下面代码创建了一个person对象,并用两种方式打印出了Name的属性值。 var person = new Object(); person.name="k...2015-11-24
- 这篇文章介绍了.NET的动态编译与WS服务调用详解,有需要的朋友可以参考一下,希望对你有所帮助...2021-09-22
- 这篇文章主要为大家详细介绍了C#动态编译并执行字符串样例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 本示例核心技术是运用.NET动态编译技术+.NET映射技术,把一个代码块中的代码,动态编译成程序集后,在运用映射机制,创建对象示例,调用对象方法...2020-06-25
- 在 .net 中,创建一个对象最简单的方法是直接使用 new (), 在实际的项目中可能还会用到反射,本文就介绍了几种创建方法,感兴趣的可以了解一下...2021-07-23
- 在C++用new创建对象和不用new创建对象是有区别的,不知你是否清楚的了解它们到底有什么样的区别呢?下面小编就用示例来告诉大家吧,需要的朋友可以过来参考下...2020-04-25
- JavaScript中的对象是基于原型的。原型是对象的基础,它定义并实现了一个新对象所必须包含的成员列表,并被所有同类对象实例所共享。与其他语言中类的概念相比,原型更像是类的静态成员。本文着重给大家介绍javascript创建对象、对象继承的实用方式...2016-03-10
- 这篇文章主要介绍了java实现动态编译并动态加载,需要的朋友可以参考下...2021-04-15
- 这篇文章主要介绍了Automation服务器不能创建对象的多种解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
- 这篇文章主要给大家介绍了关于利用Builder方式创建对象的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
- 今天带大家学习Java的基础知识,文中对Java反射创建对象作了非常详细的介绍及代码示例,对正在学习Java的小伙伴们很有帮助,需要的朋友可以参考下...2021-06-01
- 这篇文章主要介绍了改善Java代码之慎用java动态编译,需要的朋友可以参考下...2021-04-15