读书人

string语句的写法.

发布时间: 2012-01-13 22:43:29 作者: rapoo

求一个string语句的写法...
我想动态生成一个string的语句: 
frmEmployee frm=new frm;
frm.show();
其中 frmEmployee是用参数传进去的,请问这个string 的语名怎么写?

===========================下面的方法可以执行组合的string源码======================================
private void method_test(string ACode)
{
ICodeCompiler vCodeCompiler = new CSharpCodeProvider().CreateCompiler();
CompilerParameters vCompilerParameters = new CompilerParameters();
vCompilerParameters.GenerateExecutable = false;
vCompilerParameters.GenerateInMemory = true;
vCompilerParameters.ReferencedAssemblies.Add( "System.Windows.Forms.dll ");
string vSource =
"using System.Windows.Forms;\n " +
"public class Temp\n " +
"{\n " +
" public void Test()\n " +
" {\n " +
" " + ACode + "\n " +
" }\n " +
"}\n ";
CompilerResults vCompilerResults =
vCodeCompiler.CompileAssemblyFromSource(vCompilerParameters, vSource);

Assembly vAssembly = vCompilerResults.CompiledAssembly;
object vTemp = vAssembly.CreateInstance( "Temp ");
MethodInfo vTest = vTemp.GetType().GetMethod( "Test ");


vTest.Invoke(vTemp, null);
}


=========================================
就是不知道把中间那个vSource 的值换为:
frmEmployee frm=new frm;
frm.show();
怎么去写.....



[解决办法]
get set里做个手脚如何
[解决办法]
你frmEmployee 这个类都写不进去
[解决办法]
这代码很熟悉,-_-!!! 好象是我写的
[解决办法]
参考如下代码实现

// 动态调静态

private void button1_Click(object sender, EventArgs e)
{
ICodeCompiler vCodeCompiler = new CSharpCodeProvider().CreateCompiler();
CompilerParameters vCompilerParameters = new CompilerParameters();
vCompilerParameters.GenerateExecutable = false;
vCompilerParameters.GenerateInMemory = true;

vCompilerParameters.ReferencedAssemblies.Add(GetType().Module.FullyQualifiedName); // < < < < < < < < < <添加模块文件路径
vCompilerParameters.ReferencedAssemblies.Add( "System.dll ");
vCompilerParameters.ReferencedAssemblies.Add( "System.Windows.Forms.dll ");

string vSource =
"using " + GetType().Namespace + ";\n " + // 引用命名空间
"using System.ComponentModel;\n " +
"using System.Windows.Forms;\n " +
"public class Temp\n " +
"{\n " +
" public void Test()\n " +
" {\n " +
" new " + GetType().Name + "().Show(); " + // 生成类实例
" }\n " +
"}\n ";
Console.WriteLine(typeof(Component).Module.FullyQualifiedName);
CompilerResults vCompilerResults =
vCodeCompiler.CompileAssemblyFromSource(vCompilerParameters, vSource);
if (vCompilerResults.Errors.Count > 0)
{
foreach (CompilerError vCompilerError in vCompilerResults.Errors)
{
Console.WriteLine( "错误: " + vCompilerError.ErrorText);
}
return;
}

Assembly vAssembly = vCompilerResults.CompiledAssembly;
object vTemp = vAssembly.CreateInstance( "Temp ");
MethodInfo vTest = vTemp.GetType().GetMethod( "Test ");
vTest.Invoke(vTemp, null);
}

[解决办法]
2.0不用ICodeCompiler了, 直接

CompilerResults vCompilerResults =
CodeDomProvider.CreateProvider( "CSharp ").CompileAssemblyFromSource(vCompilerParameters, vSource);

读书人网 >C#

热点推荐