读书人

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

发布时间: 2012-09-24 13:49:41 作者: rapoo

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


[解决办法]

读书人网 >asp.net

热点推荐