实现运行时从字符串动态创建对象
2008-05-01 03:25
316 查看
在运行时任意指定对象的创建类型,甚至是用表示类型的名字的字符串创建所需的对象,.net Framwork的反射机制给我们带来了解决问题的方法。这里,若只需要创建一般的对象,我们可以通过System.Activator来实现,而较复杂的我们可以通过获取构造方法来实现。
反射Reflection是.net中重要机制,通过反射,可以在运行时获得.net中每一个类型(包括类、结构、委派、接口、枚举)的成员,包括方法、属性、事件以及构造函数等,还可以获得每个成员的名称、限定符和参数等,有了反射,就可以对每一个类型了如指掌。如果获得了构造函数的信息,就可以直接创建对象,即使这个对象的类型在编译的时候还不知道。
/// <summary>
/// CreateNewControls 根据空间的名称,类型字符串,大小、位置去动态的生成一个控件
/// </summary>
/// <param name="targetControl"> 控件加载到的容器</param>
/// <param name="ctlName">生成的控件实例名称</param>
/// <param name="ctlType">生成的控件类型字符串如(TextBox、Button等)</param>
/// <param name="ctlSize">控件的大小</param>
/// <param name="ctlLocation">控件的位置</param>
/// <returns>生成的控件实例</returns>
private Control CreateNewControls(Control.ControlCollection targetControl,string ctlName,Type ctlType, System.Drawing.Size ctlSize,System.Drawing.Point ctlLocation)
{
Control toCreate;
toCreate = (Control)System.Activator.CreateInstance(ctlType);
toCreate.Name = ctlName;
toCreate.Size = ctlSize;
toCreate.Location = ctlLocation;
targetControl.Add(toCreate);
return toCreate;
}
Size cbSize = new Size(160,40);
Point cbPoint = new Point(64,206);
Control c1 = CreateNewControls(this.Controls,"control1",Type.GetType("System.Windows.Forms.CheckBox, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"),cbSize,cbPoint);
c1.Text =" Check Box";
.ne tFramework 1.1上,Type.GetType("System.Windows.Forms.CheckBox, System.Windows.Forms,Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089")。
我们如何取得所用Windows.Form程序集的版本和强名称?可以用GetType(CheckBox).AssemblyQualifiedName这样的语法,一旦得到了这些信息,我们就可以将这些信息用于其它任何控件,因为他们都来自于同一个版本Windows.Form
反射Reflection是.net中重要机制,通过反射,可以在运行时获得.net中每一个类型(包括类、结构、委派、接口、枚举)的成员,包括方法、属性、事件以及构造函数等,还可以获得每个成员的名称、限定符和参数等,有了反射,就可以对每一个类型了如指掌。如果获得了构造函数的信息,就可以直接创建对象,即使这个对象的类型在编译的时候还不知道。
/// <summary>
/// CreateNewControls 根据空间的名称,类型字符串,大小、位置去动态的生成一个控件
/// </summary>
/// <param name="targetControl"> 控件加载到的容器</param>
/// <param name="ctlName">生成的控件实例名称</param>
/// <param name="ctlType">生成的控件类型字符串如(TextBox、Button等)</param>
/// <param name="ctlSize">控件的大小</param>
/// <param name="ctlLocation">控件的位置</param>
/// <returns>生成的控件实例</returns>
private Control CreateNewControls(Control.ControlCollection targetControl,string ctlName,Type ctlType, System.Drawing.Size ctlSize,System.Drawing.Point ctlLocation)
{
Control toCreate;
toCreate = (Control)System.Activator.CreateInstance(ctlType);
toCreate.Name = ctlName;
toCreate.Size = ctlSize;
toCreate.Location = ctlLocation;
targetControl.Add(toCreate);
return toCreate;
}
Size cbSize = new Size(160,40);
Point cbPoint = new Point(64,206);
Control c1 = CreateNewControls(this.Controls,"control1",Type.GetType("System.Windows.Forms.CheckBox, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"),cbSize,cbPoint);
c1.Text =" Check Box";
.ne tFramework 1.1上,Type.GetType("System.Windows.Forms.CheckBox, System.Windows.Forms,Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089")。
我们如何取得所用Windows.Form程序集的版本和强名称?可以用GetType(CheckBox).AssemblyQualifiedName这样的语法,一旦得到了这些信息,我们就可以将这些信息用于其它任何控件,因为他们都来自于同一个版本Windows.Form
![](http://blog.csdn.net/upimg/20061210/11AJ24H030126009.jpg)
相关文章推荐
- .net中实现运行时从字符串动态创建对象
- .net中实现运行时从字符串动态创建对象
- .net中实现运行时从字符串动态创建对象
- .net中实现运行时从字符串动态创建对象 (转)
- .net中实现运行时从字符串动态创建对象
- .net中实现运行时从字符串动态创建对象 (转)
- .net中实现运行时从字符串动态创建对象
- 实现运行时从字符串动态创建对象
- 实现运行时从字符串动态创建对象 选择自 shanyou 的 Blog
- 自己实现动态创建,和运行时对象识别
- C++实现反射(根据类名动态创建对象)
- js 动态创建一个变量,以字符串形式定义变量,定义对象
- 如何在SpringMVC框架中利用Java反射机制和Javassist实现Java对象、属性、注解的动态创建生成
- 用模板实现单例模式(线程安全)、模板方式实现动态创建对象
- C++实现只能动态或者静态创建对象
- C# Window编程随记——运行时动态对象创建和动态方法调用
- Java对String字符串对象的创建,管理和“+”运算符的实现
- C++ new创建动态结构(Notepad++ 运行C++实现)
- 从零开始学C++之模板(四):用模板实现单例模式、模板方式实现动态创建对象
- 利用Java反射机制和Javassist实现Java对象及其属性的动态创建生成