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

你是C#面向对象高手吗?这有关问题能解决吗

2012-01-10 
你是C#、面向对象高手吗?这问题能解决吗?一个变态的问题请问能否把C#代码放在数据库里,比如一个class,在程

你是C#、面向对象高手吗?这问题能解决吗?
一个变态的问题
请问能否把C#代码放在数据库里,比如一个class,在程序运行时来编译这个类,然后调用其方法.


[解决办法]
序列化 反序列化
[解决办法]
反射调用
[解决办法]
参考如下代码,将vSource复制为数据库中的类代码,再修改调用的方法名

C# code
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");    }} 

热点排行