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
带你掌握框架的灵魂——反射技术
带你掌握框架的灵魂——反射技术
|
4月前
|
JSON 前端开发 Java
数据映射框架之三大神器:反射、注解、动态代理
数据映射框架之三大神器:反射、注解、动态代理
45 3
数据映射框架之三大神器:反射、注解、动态代理
|
4月前
|
存储 Java
java反射——设计框架的灵魂
java反射——设计框架的灵魂
|
4月前
|
Java
Java反射的详细解析之三
面试题: 你觉得反射好不好?好,有两个方向 第一个方向:无视修饰符访问类中的内容。但是这种操作在开发中一般不用,都是框架底层来用的。 第二个方向:反射可以跟配置文件结合起来使用,动态的创建对象,动态的调用方法。
36 0
|
4月前
|
存储 安全 JavaScript
Java面向对象高级【注解和反射】
Java面向对象高级【注解和反射】
|
安全 Java 编译器
JAVA注解与反射:看这篇文章就够了1
JAVA注解与反射:看这篇文章就够了
127 0
|
SQL 监控 Java
魔法反射--java反射进阶(实战篇)
相信很多人在初学反射的时候也都会有这个想法(我就不相信就只有我一个人这么蠢!!) 大多数人不了解反射的原因并不是不了解, 而是不知道它到底能用来干什么 今天就来为大家分享一下反射的用法
72 0
|
安全 Java 程序员
魔法反射--java反射初入门(基础篇)
反射被应用于许多方面, spring的注解, jdbc的连接都是基于反射来实现的, 可能在工作中我们很少能用到反射, 但是在面试的过程中面试官经常会问道, 可以不用反射, 但作为一个程序猿, 还是应该了解了解的
86 0
|
存储 缓存 安全
Java反射进阶—聊聊反射的几个问题
昨天有朋友反映好多反射知识没说到,所以今天算是补充篇,一起看看反射的进阶知识点。
147 0
|
设计模式 Java 开发者
反射与工厂设计模式|学习笔记
快速学习 反射与工厂设计模式
165 0
反射与工厂设计模式|学习笔记