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

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

 

 

 

目录
相关文章
|
5月前
|
Java
Java 新手入门:重载和重写傻傻分不清?一篇文章带你清晰理解!
Java 新手入门:重载和重写傻傻分不清?一篇文章带你清晰理解!
47 0
Java 新手入门:重载和重写傻傻分不清?一篇文章带你清晰理解!
|
7月前
|
Java
JavaSE 面向对象程序设计进阶 继承和方法重写 2024理论与内存详解
JavaSE 面向对象程序设计进阶 继承和方法重写 2024理论与内存详解
47 3
|
8月前
|
Java 编译器
Java面向对象编程:构造方法详解
Java面向对象编程:构造方法详解
121 2
|
7月前
|
Java 开发者
Java编程秘诀:掌握抽象类与接口的终极指南!
【6月更文挑战第17天】在Java中,抽象类与接口助力构建复杂系统。以动物园管理系统为例,`Animal`抽象类定义共性(如`eat()`和`makeSound()`),狮子和大象继承并实现具体行为。接口`Performable`允许动物表演,如跳舞的大象实现该接口。抽象类提供继承基础,接口实现多态,赋能灵活可扩展的软件设计。
41 0
|
安全 Java 编译器
JAVA注解与反射:看这篇文章就够了2
JAVA注解与反射:看这篇文章就够了
89 0
|
安全 Java 编译器
JAVA注解与反射:看这篇文章就够了1
JAVA注解与反射:看这篇文章就够了
160 0
|
SQL 监控 Java
魔法反射--java反射进阶(实战篇)
相信很多人在初学反射的时候也都会有这个想法(我就不相信就只有我一个人这么蠢!!) 大多数人不了解反射的原因并不是不了解, 而是不知道它到底能用来干什么 今天就来为大家分享一下反射的用法
92 0
|
Java
Java面向对象进阶6——权限修饰符(含源码阅读)
在上面举例的代码中,brand , colour两个变量是没用访问修饰符的,但是可以在同一个包的测试类中使用是不会报错的,但是如果使用别的包中的类就会报错
110 0
Java面向对象进阶6——权限修饰符(含源码阅读)
|
Java
一个小例子体会Java反射的动态性
一个小例子体会Java反射的动态性
115 0