Petshop4.0学习笔记二——利用反射编程

简介: (PetShop.IDAL.ICategory)Assembly.Load("PetShop.SQLServerDAL").CreateInstance("PetShop.SQLServerDAL.Category"); 分析这句代码:(PetShop.IDAL.ICategory)强类型转换Assembly类,可以加载程序集、浏览程序集的元数据和构成部分、发现程序集中包含的类型以及创建这些类型的实例。

(PetShop.IDAL.ICategory)Assembly.Load("PetShop.SQLServerDAL").CreateInstance("PetShop.SQLServerDAL.Category");

 

分析这句代码:

  1. (PetShop.IDAL.ICategory)强类型转换
  2. Assembly类,可以加载程序集、浏览程序集的元数据和构成部分、发现程序集中包含的类型以及创建这些类型的实例。
  3. Assembly.Load()方法,加载程序集
  4. CreateInstance,从加载的程序集中查找某个类型,并创建它的实例,就是被强类型转换的对象。

这种用法是利用反射编程的一种常见用法,此外,Assembly类还有一些方法:

  1. GetName(),获取此程序集的AssemblyName(完整描述该程序集的唯一标识);
  2. GetModule(String),获取该程序集中的指定模块;
  3. GetModules(),获取作为此程序集的一部分的所有模块;
  4. GetType(),获取当前实例的类型;
  5. GetType(string),获取程序集实例中具有指定名称的Type对象。
  6. GetTypes,获取此程序集中定义的所有类型,是一个类型数组。
  7. LoadModul(String, Byte[]),加载此程序集的内部模块。
  8. ToString(),返回程序集的全名,即所谓的显示名称。

具体用法实例如下:

  1. int majorVersion=typeof(WebbHelper).Assembly.GetName().Version.Major;   //获取当前程序集WebbHelper版本信息
  2. Stream stream=typeof(WebbHelper).Assembly.GetMainfestResourceStream(fullFileName);   //获取当前程序集中的资源字节数组

利用反射实现控件数组的功能:现如今在一个webform上有10个TextBox,分别命名为textbox1,textbox2,……textbox10,想一次获取他们的值或对它们赋值,而不想写10次,用下面的方法:

for(int i=1;i<=10;i++)

{

  object o=this.GetType().GetField("textbox"+i.ToString(),BindingFlags.Instance|BindingFlags.NonPublic).GetValue(this);

  TextBox text=(TextBox)o;

  text.Text="你好"; //这样通过循环,实现了对这10个TextBox控件的赋值

}

解释下,

  1. this.GetType(),获取当前的窗体类(Page)
  2. GetField("textbox"+i.ToString(),BindingFlags.Instance|BindingFlags.NonPublic),在Page类当中获取名称为"textbox"+i.ToString()的实例(控件),实际上是通过搜索当前窗体类,BindingFlags.Instance|BindingFlags.NonPublic就是指定搜索的条件。
  3. GetValue(this),其实就是获取该实例的所有信息(属性、方法)

这种方法非常实用,可以在很大程度上优化我们的代码。

 

 

 

目录
相关文章
|
存储 前端开发 Java
带你掌握框架的灵魂——反射技术
带你掌握框架的灵魂——反射技术
|
6月前
|
JSON 前端开发 Java
数据映射框架之三大神器:反射、注解、动态代理
数据映射框架之三大神器:反射、注解、动态代理
53 3
数据映射框架之三大神器:反射、注解、动态代理
|
6月前
|
存储 Java 编译器
Java面向对象之——封装
Java面向对象之——封装
|
存储 安全 C#
C#OOP之四 深入理解方法
C#OOP之四 深入理解方法
36 0
|
6月前
|
存储 Java
java反射——设计框架的灵魂
java反射——设计框架的灵魂
|
Java
【Java面向对象】封装的认识与实现
【Java面向对象】封装的认识与实现
84 0
|
6月前
|
Java
Java反射的详细解析之三
面试题: 你觉得反射好不好?好,有两个方向 第一个方向:无视修饰符访问类中的内容。但是这种操作在开发中一般不用,都是框架底层来用的。 第二个方向:反射可以跟配置文件结合起来使用,动态的创建对象,动态的调用方法。
42 0
|
6月前
|
存储 安全 JavaScript
Java面向对象高级【注解和反射】
Java面向对象高级【注解和反射】
|
Java
Java面向对象封装
封装的概念 Java封装是一种面向对象的编程方法,它的主要思想是将类的内部细节(包括数据和方法)隐藏起来,对外只提供公共的访问接口,从而保证了程序的安全性和稳定性。 封装具体实现步骤 1、声明类的成员变量时,使用private关键字进行修饰,将变量设为私有属性(只能在类的内部访问)。 2、为每个私有属性提供getter和setter方法,用来读取和修改私有属性。 3、getter方法用于获取私有属性的值,setter方法用于设置私有属性的值。在方法内部,可以添加一些控制语句用于
73 0
|
安全 Java 程序员
魔法反射--java反射初入门(基础篇)
反射被应用于许多方面, spring的注解, jdbc的连接都是基于反射来实现的, 可能在工作中我们很少能用到反射, 但是在面试的过程中面试官经常会问道, 可以不用反射, 但作为一个程序猿, 还是应该了解了解的
95 0