随笔分类 - 反射
摘要:我们在前面的文章中提到了两中实现晚绑定的方式,那么在用的时候是否发现有什么不同呢? 是的,我们会很容易的发现Activator.CreateInstance()创建的对象,我们只能访问他的访问级别为public的方法,但是我们仅仅小小的统一下手脚,使用BindingFlags.NonPublic|BindingFlags.Instance就可以获得该对象的internal,private级别的变量。但是往往后一种方式我们也是不经常采取的,因为我们需要稳定的成员支持,而私有类型的成员往往是程序中最容易更新的,假如一个程序集更新后,我们使用这种方式调用即会发生错误。 今天刚...
阅读全文
摘要:开篇先熟悉两个小概念:早绑定:是指在编译时绑定对象的类型晚绑定:是指在运行时才绑定对象的类型。当然我们提到上面两个概念,肯定是为了引入今天的主题——利用反射实现晚绑定(也就是动态的加载类型,并调用它们)。我暂时只是为了测试的方便先定义一个不能执行的程序集(Person.dll)无需写的完善,仅仅作为测试使用,之后我们在这个程序中调用它。person.dll内部如下:person.dll 1 using System; 2 public class Chinese 3 { 4 private string language; 5 private ...
阅读全文
摘要:使用 Assembly 类可以加载程序集、浏览程序集的元数据和构成部分、发现程序集中包含的类型以及创建这些类型的实例。若要获取 Assembly 对象(表示当前加载到应用程序域(例如,简单项目的默认应用程序域)中的程序集)的数组,可以使用 AppDomain ..::.GetAssemblies 方法。若要动态加载程序集, Assembly 类可提供下列静态方法(在 Visual Basic 中为 Shared 方法)。 程序集被加载到发生加载操作的应用程序域中。加载程序集的推荐方式是使用 Load 方法,该方法标识要由其显示名称加载的程序集(例如"System.Windows.Fo
阅读全文
摘要:前言:由于身边也没什么学习资料,也就一边利用网络一边自己理解整理,慢慢地步入神秘的反射机制。 反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。 简而言之, 反射机制指的是程序在运行时能够获取自身的信息。例如一个对象能够在运行时知道自己有哪些方法和属性。 使用 Assembly 定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。 使用 Module 发现以下信息:包含模块的程序集以及...
阅读全文