1.反射 可以通过具体的程序集加载对应的类型,或者遍历类的成员,获取成员的类的值,具体使用场景(配合接口使用)
接口,是一种约定,使实现接口的类和结构(没错,结构也可以)在形式上保持一致,接口中的方法必须全部实现,而且接口中的成员总是public的。除了包含方法之外,还可以包含属性、索引器、事件,而抽象类只包含方法,无法被实例化。包含未实现的方法声明。
2.当功能点具有较多的变化需求时,将该变化需求都在一个类中维护会显得代码臃肿不堪,维护性比较低,这个时候,可以通过使用接口去作为多个类的一个统一实现,即在编译的时候,该类型是未知的,只有在运行的时候,CLR才会知道具体的对象类型,这个时候需要创建具体的对象类型,有两种方法,第一是维护一个类,每在添加对应功能点的类时,就要在该类中添加对应的具体类型去生成对应的实例,另一种就是用反射,如果可以知道具体加载的方法,就可以通过反射直接加载对应的程序集并创建实例,和上面一种方法的好处在于,不需要多维护一个类去加载对应的具体对象类型实例。就是在维护的时候,如果用的工厂模式,需要维护工厂加载具体实例的类和派生类,而如果使用的是反射的话在对功能进行添加时,不需要去维护工厂类了。
3.通过反射遍历类成员,获取属性值,这个使用场景是在UI上,例如一个表格,我们需要获取当前表格列头所绑定的数据成员的名称,来获取对应成员的值,如果不用反射,每增加一列,就要在多维护一次,添加对增加的列的判断。
当然,用不用反射还是要看性能要求,如果用了反射后出现性能问题,则不用为好