• 动态编译代码段,并执行方法---------------------------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();
            }

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

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

  • 相关阅读:
    tensorflow slim代码使用
    Tensorflow学习之TF-Slim的使用
    FCN用卷积层代替FC层原因(转)
    ubuntu命令查看英伟达显卡型号
    传输
    将tf-faster-rcnn检测结果画在一张图像内
    GPU跑tf-faster-rcnn demo以及训练自己的数据
    以太网适配器的驱动程序出现问题
    TensofFlow函数: tf.image.crop_and_resize
    TensorFlow函数: tf.stop_gradient
  • 原文地址:https://www.cnblogs.com/xiaoleye/p/5195505.html
Copyright © 2020-2023  润新知