您的位置:首页 > 编程语言 > C#

C#中反射机制的使用

2012-06-26 16:32 309 查看
在编写代码的时候,我们可能还不知道或不能确定一些对象的信息,于是把决定权交给代码本身,将来在需要的时候由代码本身去获取和判断这些信息,并做出相应的反应。在这种情况的驱使下,反射技术产生了。

反射是.Net中的重要机制,通过反射,可以在运行时获得.Net中每一个类型(包括类、结构、委托、接口和枚举等)成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。反射是一种晚绑定,它可以被开发者用来设计出更具灵活性的代码,而代价则是花费更多的系统资源开销使应用程序可以在运行时获取一些未知信息。

今天我们就以通过DLL文件选择,来展示如何通过反射来创建窗体。程序运行界面如下:



通过浏览按钮,我们选择包含窗体的DLL文件。然后通过反射机制,我们把该DLL中的窗体列到左侧的列表中。点击相应的窗体,在右侧窗格中创建该窗体实例。

实例的文件结构如下:



ReflectionTest为我们的主展示窗体,WindowsForms为我们的Dll类包。

WindowsForms类中,就是我们为了展示反射创建的几个不同的窗体,这个比较简单就不介绍了。下面我们介绍一下ReflectionTest程序集中的FormMain。

该类中主要有两个方法最为重要,第一个是ShowDll(),这个是用来展示选择的DLL中的所有窗体的,代码如下:

/// <summary>
/// 通过反射,展示DLL文件中的窗体列表
/// </summary>
private void ShowDll()
{
Assembly assembly = Assembly.LoadFile(selectedDll);
Type[] typeArr = assembly.GetTypes();
foreach (Type type in typeArr)
{
if (type.BaseType.Name == "Form")
{
listBox_Forms.Items.Add(type.FullName);
}
}
}


第二个是ShowForm(),用来创建选择的窗体的实例,并将此实例展示到Panel中,代码如下:

/// <summary>
/// 通过反射,创建选择的窗体的实例,并展示到展示窗格panel中
/// </summary>
private void ShowForm()
{
panel_FormViewer.Controls.Clear();
Assembly assembly = Assembly.LoadFile(selectedDll);
Type[] typeArr = assembly.GetTypes();
Form form = (Form)System.Activator.CreateInstance(assembly.GetType(selectedForm));
form.TopLevel = false;
panel_FormViewer.Controls.Add(form);
form.Show();
}


到此,反射的简单应用,你了解了吗?!
文章中所使用的代码,在附件中,请自行下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: