看你用在什么场合?如果是web应用程序,可以用session或ViewState变量来存取,可以试试
解决方案 »
- C# webbrowser要获取div的内容,可是div的内容是通过js赋值的,要如何处理
- 哪位大侠帮我看下,姐姐感激不尽!
- 请问winform中右上方的退出×怎么添加事件?
- chart控件能用到windows forms中吗?
- c#调用excel实现票据连续打印
- 请教一个字符串生成
- 我在做一个登录模块,遇到问题 高手指点一下!
- web上"建立调色板"急急急急,请各位帮帮忙
- 一个具有关系的DataTable帮定在datagrid后,怎么获取当前显示的表的表名
- owc11的问题。如何去掉owc11的快捷菜单,谢谢
- 哪个有email的详细例子---
- c#中用OleDb连接MySQL的连接字符串是什么?在线等待
{
FieldInfo fi=this.GetType().GetField("a"+wl
,BindingFlags.NonPublic|BindingFlags.Instance
);
if(fi==null)
throw(new Exception("cant find a"+wl));
if(fi.FieldType!=typeof(int))
throw(new Exception("type unmatched"));
return (int)fi.GetValue(this);
}
using System.Reflection;namespace XX
{
class Class1
{
int bc=100;
int abc=1000;
public int getValue(string wl)
{
FieldInfo fi=this.GetType().GetField("a"+wl
,BindingFlags.NonPublic|BindingFlags.Instance
);
if(fi==null)
throw(new Exception("cant find a"+wl));
if(fi.FieldType!=typeof(int))
throw(new Exception("type unmatched"));
return (int)fi.GetValue(this);
}
public void Run()
{
Console.Write(this.getValue("bc"));
}
}
class XX
{
[STAThread]
static void Main(string[] args)
{
new Class1().Run();
}
}
}
动态编译:支持以一种或多种语言进行代码编译。
生成 CodeDOM 图
要生成 CodeDOM 对象图(即源代码模型),您可以使用 System.CodeDom 和 System.CodeDom.Compiler 命名空间提供的类。为示例程序“Hello World”生成源代码模型
以下演练提供了一个如何生成 CodeDOM 对象图的示例,该对象图表示一个简单的应用程序“Hello World”的代码。下面提供了该示例的完整的源代码。编译单元编译单元引用可进行编译的 CodeDOM 树(即源代码模型)。CodeDOM 代码生成器和代码编译器处理编译单元引用的对象图。CodeDOM 定义一个名为 CodeCompileUnit 的单元,该单元可以引用以要编译的源代码为模型的 CodeDOM 对象图。CodeSnippetCompileUnit 可以包含已经以目标语言表示的源代码段,但不能呈现为另一种语言。要创建简单应用程序的对象图,您必须汇编源代码模型并从 CodeCompileUnit 对其进行引用。您可以选择以实例化 CodeCompileUnit 开始。您可以用本示例中示范的语法创建一个新的编译单元:[C#]
CodeCompileUnit compileunit = new CodeCompileUnit();
[Visual Basic]
Dim compileunit As New CodeCompileUnit()
定义和导入命名空间要定义命名空间,请创建一个 CodeNamespace 并使用适当的构造函数或通过设置其 Name 属性给它分配一个名称。下面的示例使用分配指定名称的构造函数对此进行了示范:[C#]
CodeNamespace Samples = new CodeNamespace("Samples");
[Visual Basic]
Dim Samples As New CodeNamespace("Samples")
要将命名空间导入添加到命名空间,为每个要导入的命名空间调用 CodeNamespace.Imports.Add,然后为每个要导入的命名空间传递 CodeNamespaceImport,它表示要导入的命名空间。下面的示例示范了对名为 Samples 的 CodeNamespace 使用该方法:[C#]
Samples.Imports.Add( new CodeNamespaceImport("System") );
[Visual Basic]
Dim Import1 As New CodeNamespaceImport("System")
Samples.Imports.Add( Import1 )
定义类要使用 CodeDOM 声明一个类、结构、接口或枚举,请创建一个新 CodeTypeDeclaration 并向其 Name 属性给它分配一个名称。以下示例对此进行了示范:[C#]
CodeTypeDeclaration Class1 = new CodeTypeDeclaration("Class1");
[Visual Basic]
Dim Class1 As New CodeTypeDeclaration("Class1")
要将类型添加到命名空间,请对对象(该对象表示将包含该类型的命名空间)调用 CodeNamespace.Types.Add,然后将引用传递到 CodeTypeDeclaration,它表示要添加到命名空间的类型。下面的示例示范了如何将名为 Class1 的类添加到名为 Samples 的命名空间:[C#]
Samples.Types.Add(Class1);
[Visual Basic]
Samples.Types.Add(Class1)
将类成员添加到类CodeDOM 提供了多种可用来表示类成员的元素。每个类成员都可被添加到对象模型中,方法是调用 CodeTypeDeclaration.Members.Add 方法,然后将引用传递到 CodeDOM 元素(该元素表示这个要添加的成员)。如果您正在为可执行程序定义代码,通过创建 CodeEntryPointMethod 来表示该方法以指出程序的入口点是很有必要的。 下面的示例示范了如何定义入口点方法(该方法包含调用 System.Console.WriteLine 以输出“Hello World!”的 CodeMethodInvokeExpression):[C#]
CodeEntryPointMethod Start = new CodeEntryPointMethod();
CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression( new CodeTypeReferenceExpression("System.Console"), "WriteLine", new CodePrimitiveExpression("Hello World!") );
Start.Statements.Add(new CodeExpressionStatement(cs1));
虽然要添加的语句是一个表达式,但是 CodeEntryPointMethod.Statements 集合接受语句,而不接受表达式。因此,创建 CodeExpressionStatement 来引用并封装 CodeMethodInvokeExpression。表示 CodeDOM 元素不能方便地表示的代码CodeDOM 不会为表示各种可能的编程语言功能而提供相应元素。CodeDOM 支持几种主要类型的代码元素,这些代码元素出现在支持公共语言运行库的编程语言中。虽然 CodeDOM 不能自动将代码片段翻译成ASP.NET语言,但是 CodeDOM 元素无法方便表示的代码可以封装在 CodeSnippetExpression、CodeSnippetStatement 或 CodeSnippetCompileUnit 中。