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
带你掌握框架的灵魂——反射技术
带你掌握框架的灵魂——反射技术
|
5月前
|
JSON 前端开发 Java
数据映射框架之三大神器:反射、注解、动态代理
数据映射框架之三大神器:反射、注解、动态代理
52 3
数据映射框架之三大神器:反射、注解、动态代理
|
5月前
|
存储 Java
java反射——设计框架的灵魂
java反射——设计框架的灵魂
|
5月前
|
存储 安全 JavaScript
Java面向对象高级【注解和反射】
Java面向对象高级【注解和反射】
|
C#
面向对象——反射
面向对象——反射
197 0
面向对象——反射
|
安全 Java 程序员
魔法反射--java反射初入门(基础篇)
反射被应用于许多方面, spring的注解, jdbc的连接都是基于反射来实现的, 可能在工作中我们很少能用到反射, 但是在面试的过程中面试官经常会问道, 可以不用反射, 但作为一个程序猿, 还是应该了解了解的
94 0
|
设计模式 Java 程序员
为什么程序员喜欢用大量的if... ...else if ;不喜欢用设计模式+反射+自定义注解
为什么程序员喜欢用大量的if... ...else if ;不喜欢用设计模式+反射+自定义注解
105 0
为什么程序员喜欢用大量的if... ...else if ;不喜欢用设计模式+反射+自定义注解
|
Java 数据库连接 C#
反射机制的概念
反射机制的概念
103 0
反射机制的概念
|
安全 Java 测试技术
Java反射:框架设计的灵魂
Java反射:框架设计的灵魂
132 1
|
存储 缓存 安全
Java反射进阶—聊聊反射的几个问题
昨天有朋友反映好多反射知识没说到,所以今天算是补充篇,一起看看反射的进阶知识点。
151 0