1、反射
背景
今天一同学问我什么是反射,反射有什么作用?
我回答到:反射是让程序员在程序运行周期获得程序集,模块,类的信息
作用:则可以动态的组装配件,动态调用方法,获取属性值...
我也不知道这样回答是否正确,于是我想写个例子让他明白一下
例子产生源由:
TT软件外包公司,LG软件外包公司(声明:虚拟公司)
人物:小眯,LG,TT
一天LG公司接到一个大单,可是人手不够,需要马上加人才能启动项目。
可是临时招人怕来不急,因为项目挺紧的。于是小眯提议去TT公司买人。
现在软件外包人员都是卖来卖去的,呵呵!这个主意不错。我同意了小眯的做法。
在买人过程中,我无意中碰到一个问题,用反射给解决了:
1
namespace LGCompany2


{3
public class ReflectionDemo4

{5
public static void Main()6

{7
//我先让小眯去问问TT公司的人力资源,看看是否有人卖8
bool result = TTCompany.CustomerAccess.CallHumanResource("xiaomi");9
10
//结果11
if(result)12

{13
//续继要小眯去办理此事14
}15
else16

{17
//小眯跟我说,她们那边没人卖给我们.唉,这可怎么办,我们的项目紧呀,最少差三个人,现在人员不到项目也无法启动呀!没办法,我亲自出马,于是我拔通了TT公司董事的电话18
19
object[] objList = TTCompany.CustomerAccess.CallTT("LG");20
//真晕,说给了我三个人,竟然还包装起来.当时急,也没问这三个人的具体情况,这可怎么办,再打电话过去问,有点不好意思吧!21
//怎么办?22
//怎么办?23
//我又无法访问到她们公司人员资料表,看来她们公司对人才管理得很保守24
//我左想右想,为何不试试反射?对没错,我们就用反射25
26
foreach(object obj in objList)27

{28
Type objType=obj.GetType();29
PropertyInfo[] propertyList=objType.GetProperties();30
//我们先看这些人有哪些属性(打印出来)31
for(int i=0;i<propertyList.Length;i++)32

{33
Console.Write("{0}\t",propertyList[i].Name);34
}35
Console.WriteLine();36
//我们再看看这些人属性的值,并打印出来37
for(int j=0;j<propertyList.Length;j++)38

{39
Console.Write("{0}\t",propertyList[j].GetValue(obj,null));40
}41
Console.WriteLine();42
Console.WriteLine();43
}44
}45
Console.ReadKey();46
47
//哈哈,三个人的基本资料全部出来了,不过好像有点少,TT公司也真是的,人员信息也搞得这么神密,不过看到是信息学院和农业大学的应该不会很烂,,呵呵,我们的项目可以正常启动了!48
49
}50
}51
}
打印结果:
1

2
namespace TTCompany3


{4

/**////<summery>5
///公司内部用的人员资料表6
///</summery>7
public class Person8

{9

--- 构造器 ---#region --- 构造器 ---10
public Person()11

{12
}13
public Person(string name,int age,string university)14

{15
this.name = name;16
this.age = age;17
this.university = university;18
}19
20
#endregion21
22

--- 私有字段 ---#region --- 私有字段 ---23
24
private string name = string.Empty;25
private int age = 0;26
private string university =string.Empty;27
28
#endregion29
30

--- 公有属性 ---#region --- 公有属性 ---31
32

/**//// <summary>33
/// 人的姓名34
/// </summary>35
public string Name36

{37

get
{ return name; }38

set
{ name = value;}39
}40
41

/**//// <summary>42
/// 人的年龄43
/// </summary>44
public int Age45

{46

get
{ return age;}47
set48

{49
if(value>130||value<=0)50

{51
throw new Exception("这个人的年龄有问题!");52
}53
else54

{55
age = value;56
}57
}58
}59
60

/**//// <summary>61
/// 毕业学校62
/// </summary>63
public string University64

{65

get
{ return university;}66

set
{ university = value;}67
}68
69
#endregion70
}71
public class CustomerAccess72

{73

/**//// <summary>74
///TT公司人力资源访问接口75
/// </summary>76
/// <returns>返回一个是否有人可卖</returns>77
public static bool CallHumanResource(string customerName)78

{79
//小眯说话态度不好,人家一听是她就把电话挂了.80
if(customerName=="xiaomi")81

{82
return false;83
}84
return true;85
}86
87

/**//// <summary>88
///TT公司老板访问接口89
/// </summary>90
/// <returns>返回一个对象集合</returns>91
public static object[] CallTT(string customerName)92

{93
if(customerName=="LG")94

{95
//经过一般交谈,她公司同意卖三个人给我,呵呵!96
object[] personCollection=new object[]97

{98
new Person("赖子",21,"江西信息学院"),99
new Person("陈云",21,"江西信息学院"),100
new Person("张江帆",21,"江西农业大学")101
}; 102
return personCollection;103
}104
else105

{106
return null;107
}108
}109
}110
}
有表达不清的地方,望大家指出,谢谢!
作者:Louja
出处:http://louja.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此声明,且在文章页面给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号