首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

小弟我想改进代码 想用委托实现以上程序 请 谢了

2012-09-24 
我想改进代码 想用委托实现以下程序 请高手指点 谢了protected void Page_Load(object sender, EventArgs

我想改进代码 想用委托实现以下程序 请高手指点 谢了
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(" }");
  codes.Append(" }");
  codes.Append("}");



  return (codes.ToString());
  }

  //获取乘法代码
  private static string GetMulCode(int a, int b)
  {
  StringBuilder codes = new StringBuilder();
  //引用 
  codes.Append("using System; ");
  //命名空间定义
  codes.Append("namespace Yb");
  codes.Append("{");
  //类定义
  codes.Append(" public class Mul");
  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 GetDivCode(int a, int b)
  {
  StringBuilder codes = new StringBuilder();
  //引用 
  codes.Append("using System; ");
  //命名空间定义
  codes.Append("namespace Yb");
  codes.Append("{");
  //类定义
  codes.Append(" public class Div");
  codes.Append(" {");
  //方法定义
  codes.Append(" public static object Func()");
  codes.Append(" {");
  codes.Append(" return (" + (a / b) + ");");
  codes.Append(" }");
  codes.Append(" }");
  codes.Append("}");

  return (codes.ToString());
  }
}

[解决办法]
太长了
帮你整成代码样式吧 

C# code
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(" }");  codes.Append(" }");  codes.Append("}");  return (codes.ToString());  }  //获取乘法代码  private static string GetMulCode(int a, int b)  {  StringBuilder codes = new StringBuilder();  //引用    codes.Append("using System; ");  //命名空间定义  codes.Append("namespace Yb");  codes.Append("{");  //类定义  codes.Append(" public class Mul");  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 GetDivCode(int a, int b)  {  StringBuilder codes = new StringBuilder();  //引用    codes.Append("using System; ");  //命名空间定义  codes.Append("namespace Yb");  codes.Append("{");  //类定义  codes.Append(" public class Div");  codes.Append(" {");  //方法定义  codes.Append(" public static object Func()");  codes.Append(" {");  codes.Append(" return (" + (a / b) + ");");  codes.Append(" }");  codes.Append(" }");  codes.Append("}");  return (codes.ToString());  }} 


[解决办法]

热点排行