动态编译代码段,并执行方法---------------------------C#

首先建一个类://这是网上找的例子。这里演示了一个简单的操作。里面是写死的字符串。。以后可以写一个通用的方法。

 public class dongtaibianyi
    {
       public static object CalcValue(string expression)
        {
            var codeProvider = new CSharpCodeProvider();
            var parameters = new CompilerParameters();
            parameters.GenerateExecutable = false;
            parameters.GenerateInMemory = true;
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("using System;");
            sb.AppendLine("public class DynamicClass {");
            sb.AppendLine("  public static object CalcValue() {");
            sb.AppendLine("    return " + expression + ";");
            sb.AppendLine("  }");
            sb.AppendLine("}");
            var result = codeProvider.CompileAssemblyFromSource(parameters, sb.ToString());
            if (result.CompiledAssembly != null)
            {
                MethodInfo method = result.CompiledAssembly.GetType("DynamicClass")
                    .GetMethod("CalcValue", BindingFlags.Static | BindingFlags.Public);

                return method.Invoke(null, null);
            }

            return null;
        }
    }

接下来再Main函数中调用:

      static void Main(string[] args)
        {
            //chongzai c1 = new chongzai() { canshu1 = 34 };
            //chongzai c2 = new chongzai() { canshu1 = 78 };

            //chongzai c3 = new chongzai() { canshu1 = 128 };

            //Int32 jsjsj =c3+(c2+(c1 + 0));

            //Int32 klkkl = c1 + 3;//操作符重载
            //string s1 = (string)c2;//转换操作符。。显式
            //c2 = "1024";//转换操作符。。隐式
            //Console.WriteLine("操作符重载结果:{0}" + klkkl);
            //Console.WriteLine("显示转换操作符结果:{0}" + s1);
            //Console.WriteLine("隐式转换操作符结果:{0}" + c2.canshu1);
            //Console.ReadKey();

            object result = dongtaibianyi.CalcValue("5*2");
            Console.WriteLine("{0} ({1})", result, result.GetType());
            Console.ReadKey();
        }

这里的注释类容是上一个笔记中的重载操作符。。。我把他们写在一起了。。。因为我想到了一个主意。

通过  重载操作符动态编译 这两种方法结合在一起。可以实现一个 作用于 复杂类型 的 计算器。。。。 

 

你可能感兴趣的:(动态编译代码段,并执行方法---------------------------C#)