什么是反射


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...

面试题 相关文章推荐
PHP如何防止SQL注入
May 03 面试题
C语言笔试集
Jul 24 面试题
大整数数相乘的问题
Jul 22 面试题
将n个数按输入顺序的逆序排列,用函数实现
Nov 14 面试题
统计每一学生的平均成绩
Jun 06 面试题
杭州-DOTNET笔试题集
Sep 25 面试题
.net软件工程师应聘上机试题
Mar 10 面试题
什么是ARP(Address Resolution Protocol)地址解析协议
Oct 31 面试题
C# .NET面试题
Nov 28 面试题
斯福泰克软件测试面试题
Feb 16 面试题
东方红海科技面试题软件测试方面
Feb 08 面试题
接口的多继承会带来哪些问题
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表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
微信小程序实现留言板
2018/10/31 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
python使用xmlrpc实例讲解
2013/12/17 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
采购部主管岗位职责
2014/01/01 职场文书
给领导的检讨书
2014/02/16 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
大学生就业意向书范文
2014/04/01 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
医学求职自荐信
2014/06/21 职场文书
客户答谢会致辞
2015/07/30 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server