我想改进代码 想用委托实现以下程序 请高手指点 谢了
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());
}
}
[解决办法]
太长了
帮你整成代码样式吧
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()); }}
[解决办法]