反射机制的运用,其中包括根据配置文件中的信息,动态加载类实例的方法,反射为我们提供了动态实例化类的机制,但是由于它是运行时加载和其内部的一些问题,所以反射的性能比较低。我们在实际工作中,可视情况运用反射机制。
定义一个Car类,下面咱们就应用反射机制来运行时加载它:
public class Car
{
private string _engin1;
private string _engin2;
public string Engin1
{
get { return _engin1; }
set { this._engin1 = value; }
}
public string Engin2
{
get { return _engin2; }
set { _engin2 = value; }
}
public String GetCar()
{
return "i am a car";
}
}
//反射实例的客户代码,在这是一个窗体;在窗体的Load事件中,定义了两种利用反射机制,动态生成实例的方法,第一个是利用反射中的Assembly类进行的;第二个是利用反射中的Activator类进行的。
using System.Reflection;
using System.Configuration;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Assembly a = Assembly.Load("ReflectionTest");
Car car1 = (Car)a.CreateInstance("ReflectionTest.Car");
this.textBox1.Text = car1.GetCar();
//根据配置文件来得到类的信息,根据反射来初始化它
//要引用System.Configuration.dll
String carString = System.Configuration.ConfigurationManager.AppSettings["car"];
Type t = a.GetType(carString);
Car car2 = (Car)Activator.CreateInstance(t);
this.textBox2.Text = car2.GetCar().ToString();
}
}
配置文件的内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="car" value="ReflectionTest.Car" />
</appSettings>
</configuration>
反射机制并不是多么复杂,我们可以同过上面的例子看到,代码就几行,只要理解了反射机制的原理,我想,我们很容易把反射机制很好的运用在开发中。