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),其实就是获取该实例的所有信息(属性、方法)

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

 

 

 

目录
相关文章
|
9月前
|
JSON 前端开发 Java
数据映射框架之三大神器:反射、注解、动态代理
数据映射框架之三大神器:反射、注解、动态代理
73 3
数据映射框架之三大神器:反射、注解、动态代理
|
7月前
|
安全 Java
打破常规!JAVA反射技术让你“动态”编程
【7月更文挑战第1天】Java反射技术是动态编程的利器,它揭示了类的内部信息,允许运行时操作对象、调用方法和创建实例。动态加载类、调用方法和创建对象是其常见应用场景,但需注意反射带来的性能损失、安全风险和代码可读性下降。在平衡灵活性与效率时谨慎使用。
63 0
|
8月前
|
SQL 缓存 Java
ReflectionUtils反射工具:精要介绍与实战应用指南
ReflectionUtils反射工具:精要介绍与实战应用指南
|
安全 Java 编译器
JAVA注解与反射:看这篇文章就够了2
JAVA注解与反射:看这篇文章就够了
97 0
|
安全 Java 编译器
JAVA注解与反射:看这篇文章就够了1
JAVA注解与反射:看这篇文章就够了
176 0
|
设计模式 JSON 数据格式
【工作中问题解决实践 六】基于反射及类装饰模式的数据对比框架(上)
【工作中问题解决实践 六】基于反射及类装饰模式的数据对比框架(上)
122 0
|
JSON 数据库 数据格式
【工作中问题解决实践 六】基于反射及类装饰模式的数据对比框架(下)
【工作中问题解决实践 六】基于反射及类装饰模式的数据对比框架(下)
138 0
|
SQL 监控 Java
魔法反射--java反射进阶(实战篇)
相信很多人在初学反射的时候也都会有这个想法(我就不相信就只有我一个人这么蠢!!) 大多数人不了解反射的原因并不是不了解, 而是不知道它到底能用来干什么 今天就来为大家分享一下反射的用法
100 0
|
Java
一个小例子体会Java反射的动态性
一个小例子体会Java反射的动态性
127 0