C#高级应用之CodeDomProvider引擎篇 .

using System;
using System.Text;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;
namespace ToolPackages.CodeDomProvider
{

 public class SampleCodeDomProvider
 {
  //代码生成器对象
  private static System.CodeDom.Compiler.CodeDomProvider comp = new  CSharpCodeProvider();
  //编译器参数
  private static CompilerParameters cp = new CompilerParameters();
  private object curObj;
  public bool Compile(string codes)
  {
   StringBuilder codeBuilder = new StringBuilder();
   //完成待编译的代码构建工作,可移动到调用层构建
   codeBuilder.Append("using System;");
   codeBuilder.Append("using Microsoft.JScript;");
   codeBuilder.Append("public class Sharpnessdotnet{");
   codeBuilder.Append(codes);
   codeBuilder.Append("}");
   //完成编译器参数的初始化
   //1.引用的程序集
   cp.ReferencedAssemblies.Add("System.dll");
   cp.ReferencedAssemblies.Add("Microsoft.JScript.dll");
   //2.仅在内存中生成
   cp.GenerateExecutable = false;
   cp.GenerateInMemory = true;
   
   string code = codeBuilder.ToString();
   //利用编译器参数设置和构建的代码进行编译工作
   CompilerResults cr = comp.CreateCompiler().CompileAssemblyFromSource(cp, code);
   //判断是否编译成功
   if (cr.Errors.HasErrors)
   {
    return false;
   }
   else
   {
    //获取编译成功的程序集
    Assembly a = cr.CompiledAssembly;
    //从程序集中获取指定类型
    System.Type type = a.GetType("Sharpnessdotnet");
    //调用其默认构造函数,返回一个实例
    curObj = type.GetConstructor(new Type[0]).Invoke(null);
    return true;
   }
  }
  //调用指定成员
  public object InvokeMember(string member,System.Reflection.BindingFlags flags,params object[] parameters)
  {
   if(curObj!=null)
   {
    return  curObj.GetType().InvokeMember(member,flags,null,curObj,parameters);
   }
   else
   {
    throw new Exception("please compile first.");
   }
  }
 }
}

//调用实例部分 

 

using System;
using System.IO;
using System.Collections;
using System.Text;
using System.Data;
using ToolPackages.CodeDomProvider;
namespace ToolPackages
{
 class Application
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   SampleCodeDomProvider myCoder = new SampleCodeDomProvider();
   StringBuilder codes = new StringBuilder();
   codes.Append("public void sayHello()");
   codes.Append("{");
   codes.Append("Console.WriteLine(/"hello world.../");");   
   codes.Append("}");
   codes.Append("public static void saySomething(string message)");
   codes.Append("{");
   codes.Append("Console.WriteLine(message);");   
   codes.Append("}");
   myCoder.Compile(codes.ToString());
   myCoder.InvokeMember("sayHello",System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod,null);
   myCoder.InvokeMember("saySomething",System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.InvokeMethod,new object[]{"my name is sharpnessdotnet,i love system analyse."});
   Console.Read();   
  }  
  
  
 }
 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux—命令汇总

pwd # 显示当前工作目录cd /tmp # cd切换工作目录pwdcd ./dir01 # .当前工作目录cd ../dir02 # ..上层工作目录cd - # -前一个工作目录cd ~ …

flex 添加右键链接

private var myMenu:ContextMenu;private function setViewerVersion():void{var menuItem:ContextMenuItem new ContextMenuItem("技术支持&#xff1a;中科天宇软件有限公司", true, true);menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, functio…

jquery数据折叠_通过位折叠缩小大数据

jquery数据折叠Sometimes your dataset is just too large, and you need a way to shrink it down to a reasonable size. I am suffering through this right now as I work on different machine learning techniques for checkers. I could work for over 18 years and buy…

js基础语法

||与&& a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回aa || b : 将a, b转换为Boolean类型, 再执行逻辑或, true返回a, false返回b转换规则:对象为true非零数字为true非空字符串为true其他为false * 几乎所有语言中||和&&都遵…

新鬼影病毒

今天和明天是最后两天宿舍有空调的日子啦,暑假宿舍没空调啊,悲催T__T 好吧,今天是最精华的部分啦对于鬼影3的分析,剩下的都是浮云啦,alg.exe不准备分析了,能用OD调试的货.分析起来只是时间问题.但是MBR和之后的保护模式的代码就不一样啦同学们,纯静态分析,伤不起啊,各种硬编码,…

php计算单双,PHP中单双号与变量

例子$string "beautiful";$time "winter";$str This is a $string $time morning!;echo $str. "";eval("\$str \"$str\";");echo $str;?>输出&#xff1a;This is a $string $time morning!This is a beautiful win…

Silverlight:Downloader的使用(event篇)

(1)Downloader的使用首先我们看什么是Downloader,就是一个为描述Silverlight plug-in下载功能的集合.Downloader能异步的通过HTTP GET Request下载内容.他是一个能帮助Silverlight下载内容的一个对象,这些下载内容包括(XMAL content,JavaScript content,ZIP packages,Media,ima…

决策树信息熵计算_决策树熵|熵计算

决策树信息熵计算A decision tree is a very important supervised learning technique. It is basically a classification problem. It is a tree-shaped diagram that is used to represent the course of action. It contains the nodes and leaf nodes. it uses these nod…

多亏了这篇文章,我的开发效率远远领先于我的同事

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文由独木桥先生发表于云社区专栏 介绍 如果您有从Linux服务器上的源代码安装软件的经验&#xff0c;您可能会遇到make实用程序。该工具主要用于自动编译和构建程序。它允许应用程序的作者轻松地布置构建该…

Free SQLSever 2008的书

Introducing SQL Server 2008 http://csna01.libredigital.com/?urss1q2we6这是一本提供自由使用书&#xff01;我把它翻译&#xff0c;或转送有什么关系&#xff01;这样的书还是有几本吧&#xff0c;Introducing Linq,Introducting Silverlight,都是啊&#xff01;嘿嘿。。。…

流式数据分析_流式大数据分析

流式数据分析The recent years have seen a considerable rise in connected devices such as IoT [1] devices, and streaming sensor data. At present there are billions of IoT devices connected to the internet. While you read this article, terabytes and petabytes…

oracle failover 区别,Oracle DG failover 实战

Oracle dataguardfailover实战操作步骤备库&#xff1a;SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP;添加临时文件&#xff0c;删除老的临时文…

Jenkins自动化CI CD流水线之8--流水线自动化发布Java项目

一、前提 插件&#xff1a;Maven Integration plugin 环境&#xff1a; maven、tomcat 用的博客系统代码&#xff1a; git clone https://github.com/b3log/solo.git 远端git服务器&#xff1a; [gitgit repos]$ mkdir -p solo [gitgit repos]$ cd solo/ [gitgit solo]$ git --…

oracle数据泵导入很慢,impdp导入效率的问题

内网从一台服务器A导入到另一台服务器B&#xff0c;38G的数据半个多小时才导了一个表。原来B库上是有数据的&#xff0c;是不是因为TABLE_EXISTS_ACTIONREPLACE 导致速度慢了&#xff1f;parallel8也不知道会不会设高了。SQL> show parameter cpuNAME …

BZOJ2597 WC2007剪刀石头布(费用流)

考虑使非剪刀石头布情况尽量少。设第i个人赢了xi场&#xff0c;那么以i作为赢家的非剪刀石头布情况就为xi(xi-1)/2种。那么使Σxi(xi-1)/2尽量小即可。 考虑网络流。将比赛建成一排点&#xff0c;人建成一排点&#xff0c;每场未确定比赛向比赛双方连边&#xff0c;确定比赛向赢…

数据科学还是计算机科学_数据科学101

数据科学还是计算机科学什么是数据科学&#xff1f; (What is data science?) Well, if you have just woken up from a 10-year coma and have no idea what is data science, don’t worry, there’s still time. Many years ago, statisticians had some pretty good ideas…

开机流程与主引导分区(MBR)

由于操作系统会提供所有的硬件并且提供内核功能&#xff0c;因此我们的计算机就能够认识硬盘内的文件系统&#xff0c;并且进一步读取硬盘内的软件文件与执行该软件来完成各项软件的执行目的 问题是你有没有发现&#xff0c;既然操作系统也是软件&#xff0c;那么我的计算机优势…

肤色检测算法 - 基于二次多项式混合模型的肤色检测。

由于CSDN博客和博客园的编辑方面有不一致的地方&#xff0c;导致文中部分图片错位&#xff0c;为不影响浏览效果&#xff0c;建议点击打开链接。 由于能力有限&#xff0c;算法层面的东西自己去创新的很少&#xff0c;很多都是从现有的论文中学习&#xff0c;然后实践的。 本文…

oracle解析儒略日,利用to_char获取当前日期准确的周数!

总的来说周数的算法有两种&#xff1a;算法一&#xff1a;iw算法&#xff0c;每周为星期一到星期日算一周&#xff0c;且每年的第一个星期一为第一周&#xff0c;就拿2014年来说&#xff0c;2014-01-01是星期三&#xff0c;但还是算为今年的第一周&#xff0c;可以简单的用sql函…

密码机

树状数组1 #include<bits/stdc.h>2 using namespace std;3 int x,y,c[200005];4 char str[20];5 int inline read(){6 int x0,f1;7 char chgetchar();8 while(ch<0||ch>9)9 chgetchar(); 10 while(ch>0&&ch<9){ 11 …