什么是反射


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 TransactionAPI (JTA) 主要包含几部分
Dec 07 面试题
serialVersionUID具有什么样的特征
Feb 20 面试题
面向对象编程是如何提高软件开发水平的
May 06 面试题
下述程序的作用是计算机数组中的最大元素值及其下标
Nov 26 面试题
上海某公司.net方向笔试题
Sep 14 面试题
如何在.net Winform里面显示PDF文档
Sep 11 面试题
铭立家具面试题
Dec 06 面试题
常用UNIX 命令(Linux的常用命令)
Jul 10 面试题
EJB3推出JPA的原因
Oct 16 面试题
Java程序员常见面试题
Jul 16 面试题
Ruby如何进行文件操作
Jul 17 面试题
JAVA软件工程师测试题
Jul 25 面试题
接口的多继承会带来哪些问题
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
Protoss兵种介绍
2020/03/14 星际争霸
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
JavaScript中string对象
2015/06/12 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
对javascript继承的理解
2016/10/11 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
在Python中使用元类的教程
2015/04/28 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
python实现宿舍管理系统
2019/11/22 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
一个入门级python爬虫教程详解
2021/01/27 Python
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
党员公开承诺书和承诺事项
2014/03/25 职场文书
合作经营协议书
2014/04/17 职场文书
工会趣味活动方案
2014/08/18 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
五年级学生评语大全
2014/12/26 职场文书
生日答谢词
2015/01/05 职场文书
同意报考公务员证明
2015/06/17 职场文书
停车场管理制度范本
2015/08/05 职场文书
iPhone13再次曝光
2021/04/15 数码科技
ICOM R71E和R72E图文对比解说
2022/04/07 无线电