1.程序运行时,动态获取某个特定DLL中的类型信息,动态生成类型,实例化类型对象,调用对象方法,获得对象属性。可以不用添加程序集dll的引用到工程项目中。
这就使得一些事先设计好的dll可以以装配件的形式,被宿主程序调用。
2.
比如有一个猫类: public class Cat { public int Age { get; set; } public string Name { get; set; } //假设它的属性还有很多很多 } 现在问题是:我NEW一个猫叫"小猫1",我想复制这一个对象,“小猫2”,那该怎么处理呢? 像下面这样吗: Cat c1 = new Cat() { Age=20,Name="小猫1" }; Cat c2=c1; 那这样肯定是错的。因为c1和c2都引用的是同一个对象“小猫1”,那我现在想复制一个跟小猫1一模一样的对象怎么处理呢?这里就用到了反射: 方法: protected void Page_Load(object sender, EventArgs e) { Cat c1 = new Cat() { Age=20,Name="小猫" }; Type type = typeof(Cat); Cat c2 = new Cat(); foreach (System.Reflection.PropertyInfo info in type.GetProperties()) { info.SetValue(c2, info.GetValue(c1, null), null); } Label1.Text = c2.Name; Label2.Text = c2.Age.ToString(); }
3.工厂模式中常用到反射
另,应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共语言运行库加载器管理应用程序域,这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。