日期:2014-05-17  浏览次数:20417 次

我想改进代码 想用委托实现以下程序 请高手指点 谢了
protected void Page_Load(object sender, EventArgs e)
  {
  if (!IsPostBack)
  {
  Response.Write(CodeAssembly(10, 5));
  }
  }
  public delegate string FourOperationsDelegate(int a,int b);
  private static string MakeCodeAssembly(int a, int b, FourOperationsDelegate fodelegate)
  {
  return fodelegate(a,b);
  }
   
  private string CodeAssembly(int a,int b)
  {
  //提供对 C# 代码生成器和代码编译器的实例的访问。
  CSharpCodeProvider provider = new CSharpCodeProvider();

  //表示用于调用编译器的参数
  CompilerParameters parameter = new CompilerParameters();
  //获取当前项目所引用的程序集。
  parameter.ReferencedAssemblies.Add("System.dll");
  //获取或设置一个值,该值指示是否生成可执行文件。
  parameter.GenerateExecutable = false;
  //获取或设置一个值,该值指示是否在内存中生成输出。
  parameter.GenerateInMemory = true;

  //使用指定的编译器设置,从包含源代码的字符串的指定数组,编译程序集。返回编译结果。
  CompilerResults result = provider.CompileAssemblyFromSource(parameter,
  MakeCodeAssembly(a, b,GetAddCode));//将你的式子放在这里
  object obj;
  //获取编译器错误和警告的集合
  if (result.Errors.Count > 0)
  {
   
  return "动态编译出错了!";
  }
  else
  {
  //获取或设置已编译的程序集。
  Assembly assembly = result.CompiledAssembly;
  //获取当前实例的 Type
  Type AType = assembly.GetType("Yb.Add");
  //获取类型的方法
  MethodInfo method = AType.GetMethod("Func");
  //调用方法
  obj=method.Invoke(null, null);
  }
  return obj.ToString();
  }
  //获取加法代码
  private static string GetAddCode(int a,int b)
  {
  StringBuilder codes = new StringBuilder();
  //引用 
  codes.Append("using System; ");
  //命名空间定义
  codes.Append("namespace Yb");
  codes.Append("{");
  //类定义
  codes.Append(" public class Add");
  codes.Append(" {");
  //方法定义
  codes.Append(" public static object Func()");
  codes.Append(" {");
  codes.Append(" return (" + (a+b) + ");");
  codes.Append(" }");
  codes.Append(" }");
  codes.Append("}");

  return (codes.ToString());
  }

  //获取减法代码
  private static string GetSubCode(int a, int b)
  {
  StringBuilder codes = new StringBuilder();
  //引用 
  codes.Append("using System; ");
  //命名空间定义
  codes.Append("namespace Yb");
  codes.Append("{");
  //类定义
  codes.Append(" public class Sub");
  codes.Append(" {");
  //方法定义
  codes.Append(" public static object Func()");
  codes.Append(" {");
  codes.Append(" return (" + (a - b) + ");");
  codes.Append(&quo