实现将字符串编译为代码并在程序中使用,实际应用可将字符串保存在文件中,程序启动后读取文件中字符转换为代码执行,这样只需要修改文件不改动代码就可以增删或修改程序功能,提高程序的灵活性。
例如,要实现下面的代码:
using System; namespace TestSpace { class Test { public void outPut(string value) { Console.WriteLine("RCV:" + value); Console.WriteLine(DateTime.Now.ToString()); } } }
首先添加引用:
using System; using Microsoft.CSharp; using System.CodeDom.Compiler; using System.Reflection;
将上面的代码写成字符串:
string codeStr = "using System;"; codeStr += "namespace TestSpace{"; codeStr += "class Test{"; codeStr += "public void outPut(string value){"; codeStr += "Console.WriteLine(\"RCV:\"+value);"; codeStr += "Console.WriteLine(DateTime.Now.ToString());"; codeStr += "}}}";
下面是代码实现:
CSharpCodeProvider cs = new CSharpCodeProvider(); CompilerParameters cp = new CompilerParameters(); cp.GenerateInMemory = true; cp.GenerateExecutable = false; cp.ReferencedAssemblies.Add("System.dll"); CompilerResults cr = cs.CompileAssemblyFromSource(cp, codeStr);//返回字符串的编译结果 Assembly ass = cr.CompiledAssembly;//获取编译的程序集 object obj = ass.CreateInstance("TestSpace.Test");//创建程序集中TestSpace命名空间下Test类的实例 MethodInfo mi = obj.GetType().GetMethod("outPut");//使用反射获得该实例的outPut方法 mi.Invoke(obj, new object[] { "12345" });//执行实例的outPut方法,并传入参数 Console.ReadLine();
执行结果:
标签:Console,codeStr,C#,编译成,System,outPut,字符串,using,cp From: https://www.cnblogs.com/cfsl/p/17460618.html