你是C#、面向对象高手吗?这问题能解决吗?
一个变态的问题
请问能否把C#代码放在数据库里,比如一个class,在程序运行时来编译这个类,然后调用其方法.
[解决办法]
序列化 反序列化
[解决办法]
反射调用
[解决办法]
参考如下代码,将vSource复制为数据库中的类代码,再修改调用的方法名
using Microsoft.CSharp;using System.CodeDom.Compiler;using System.Reflection;private void button1_Click(object sender, EventArgs e){ ICodeCompiler vCodeCompiler = new CSharpCodeProvider().CreateCompiler(); CompilerParameters vCompilerParameters = new CompilerParameters(); vCompilerParameters.GenerateExecutable = false; vCompilerParameters.GenerateInMemory = true; string vSource = "public class Temp\n" + "{\n" + " public double Test(double A, double B)\n" + " {\n" + " return A / B;\n" + " }\n" + "}\n"; CompilerResults vCompilerResults = vCodeCompiler.CompileAssemblyFromSource(vCompilerParameters, vSource); Assembly vAssembly = vCompilerResults.CompiledAssembly; object vTemp = vAssembly.CreateInstance("Temp"); MethodInfo vTest = vTemp.GetType().GetMethod("Test"); for (int i = 1; i < 100; i++) { object[] vParams = { 1, i }; object vDouble = vTest.Invoke(vTemp, vParams); textBox1.AppendText(vDouble.ToString() + "\r\n"); }}