什么是反射


Posted in 面试题 onMarch 17, 2012
反射,Reflection,通过它我们可以在运行时获得各种信息,如程序集、模块、类型、字段、属性、方法和事件
通过对类型动态实例化后,还可以对其执行操作
简单来说就是用string可以在runtime为所欲为的东西,实际上就是一个.net framework内建的万能工厂
一般用于插件式框架程序和设计模式的实现,当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情(前面好象见过一位高人用反射调用一个官方类库中未说明的函数。。。)
示例:
using System;
using System.Collections.Generic;
using System.Text;
namespace Example25Lib
{
public class Class1
{
private string name;
private int age;
//如果显式的声明了无参数构造函数,客户端只需要用程序集的CreateInstance即可实例化该类
//在此特意不实现,以便在客户调用端体现构造函数的反射实现
//public Class1()
//{
//}
public Class1(string Name, int Age)
{
name = Name;
age = Age;
}
public void ChangeName(string NewName)
{
name = NewName;
}
public void ChangeAge(int NewAge)
{
age = NewAge;
}
public override string ToString()
{
return string.Format(“Name: {0}, Age: {1}”, name, age);
}
}
}
反射实例化对象并调用其方法,属性和事件的反射调用略去
using System;
using System.Collections.Generic;
using System.Text;
//注意添加该反射的命名空间
using System.Reflection;
namespace Example25
{
class Program
{
static void Main(string[] args)
{
//加载程序集
Assembly tmpAss = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + “Example25Lib.dll”);
//遍历程序集内所有的类型,并实例化
Type[] tmpTypes = tmpAss.GetTypes();
foreach (Type tmpType in tmpTypes)
{
//获取第一个类型的构造函数信息
ConstructorInfo[] tmpConsInfos = tmpType.GetConstructors();
foreach (ConstructorInfo tmpConsInfo in tmpConsInfos)
{
//为构造函数生成调用的参数集合
ParameterInfo[] tmpParamInfos = tmpConsInfo.GetParameters();
object[] tmpParams = new object[tmpParamInfos.Length];
for (int i = 0; i {
tmpParams[i] = tmpAss.CreateInstance(tmpParamInfos[i].ParameterType.FullName);
if (tmpParamInfos[i].ParameterType.FullName == “System.String”)
{
tmpParams[i] = “Clark”;
}
}
//实例化对象
object tmpObj = tmpConsInfo.Invoke(tmpParams);
Console.WriteLine(tmpObj);
//获取所有方法并执行
foreach (MethodInfo tmpMethod in tmpType.GetMethods())
{
//为方法的调用创建参数集合
tmpParamInfos = tmpMethod.GetParameters();
tmpParams = new object[tmpParamInfos.Length];
for (int i = 0; i {
tmpParams[i] = tmpAss.CreateInstance(tmpParamInfos[i].ParameterType.FullName);
if (tmpParamInfos[i].ParameterType.FullName == “System.String”)
{
tmpParams[i] = “Clark Zheng”;
}
if (tmpParamInfos[i].ParameterType.FullName == “System.Int32″)
{
tmpParams[i] = 27;
}
}
tmpMethod.Invoke(tmpObj, tmpParams);
}
//调用完方法后再次打印对象,比较结果
Console.WriteLine(tmpObj);
}
}
Console.ReadLine();
}
}
}
结果:
Name: Clark, Age: 0
Name: Clark Zheng, Age: 27

Tags in this post...

面试题 相关文章推荐
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
Jun 05 面试题
什么是serialVersionUID
Mar 04 面试题
新东网科技Java笔试题
Jul 13 面试题
神路信息Java面试题目
Mar 31 面试题
如何打印出当前源文件的文件名以及源文件的当前行号
Apr 05 面试题
经典c++面试题四
May 14 面试题
南京某软件公司的.net面试题
Nov 30 面试题
什么是.net
Aug 03 面试题
如何利用cmp命令比较文件
Apr 11 面试题
介绍一下MYSQL常用的优化技巧
Oct 25 面试题
灵泰克Java笔试题
Jan 09 面试题
Unix如何添加新的用户
Aug 20 面试题
接口的多继承会带来哪些问题
Aug 17 #面试题
抽象类和接口的区别
Sep 19 #面试题
北京某科技有限公司C# .net笔试题
Sep 27 #面试题
用C#语言写出与SQLSERVER访问时的具体过程
Apr 16 #面试题
用C#语言写出在本地创建一个UDP接收端口的具体过程
Feb 22 #面试题
别名指示符是什么
Oct 08 #面试题
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
Jul 11 #面试题
You might like
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
Python操作SQLite简明教程
2014/07/10 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
python读写二进制文件的方法
2015/05/09 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
解析Python的缩进规则的使用
2019/01/16 Python
详解Django配置优化方法
2019/11/18 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
安全生产汇报材料
2014/02/17 职场文书
车间主任岗位职责
2014/03/16 职场文书
《四季》教学反思
2014/04/08 职场文书
文体活动总结范文
2014/05/05 职场文书
博士生求职信
2014/07/06 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
逃课检讨书
2015/01/26 职场文书
毕业生党员个人总结
2015/02/14 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
2016新年致辞
2015/08/01 职场文书
话题作文之呼唤
2019/12/18 职场文书