首页 > 代码库 > 反射实践积累
反射实践积累
背景
在一个服务实现内,有很多结构相似,略微不同的函数。
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; //表示StaffCodevar memberExprType = (expr.Body as MemberExpression).Type; //表示StaffCode的类型,为String
每天进步一点点~~~
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。