反射实践积累_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 反射实践积累

反射实践积累

 2014/6/25 20:55:14  _DN  程序员俱乐部  我要评论(0)
  • 摘要:背景在一个服务实现内,有很多结构相似,略微不同的函数。Martin大师的谆谆告诫我们,可以使用ExtractMethod的方式进行重构。本次练习的内容主要是使用反射。以零散知识点的形式记录每一天的工作。内容1.获取Type一般有两种方式获取类型:1.1typeof方式varentityType=typeof(T);typeof(DataRow);1.2Type.GetType()方法vardaoType=dao.GetType();2
  • 标签:反射 积累

背景

在一个服务实现内,有很多结构相似,略微不同的函数。

Martin大师的谆谆告诫我们,可以使用Extract Method的方式进行重构。

 

本次练习的内容主要是使用反射。

以零散知识点的形式记录每一天的工作。

 

内容

1. 获取Type

一般有两种方式获取类型:

1.1 typeof方式

var entityType = typeof(T);

typeof(DataRow);

1.2 Type.GetType()方法

var daoType = dao.GetType();

2.构造函数ConstructorInfo

用ConstructorInfo表示构造函数;

通过Type.GetConstructor()来获得;

如:获取有一个参数为DataRow类型的构造函数

entityType.GetConstructor(new Type[] { typeof(DataRow) });

3.方法信息MethodInfo

用MethodInfo表示构造函数;

通过Type.GetMethod ()来获得;

如:获取有一个名称为Get,且指定了特性参数类型的函数

var daoGetMethodInfo = daoType.GetMethod("Get", GetDaoGetMethodParameterTypes(exprBpk).ToArray());

4.属性PropertyInfo

这个是最常用的,就不多说了,如:

entityType.GetProperty(memberName);

5.表达式Expression

另外,使用Expression<Func<T,object>> 传递参数,好处就是可以获得所有信息——代码即数据

如:expr = zw=>zw.StaffCode

var memberName = (expr.Body as MemberExpression).Member.Name; //表示StaffCode

var memberExprType = (expr.Body as MemberExpression).Type; //表示StaffCode的类型,为String

 

每天进步一点点~~~

发表评论
用户名: 匿名