標籤:style class blog code tar ext
背景
在一個服務實現內,有很多結構相似,略微不同的函數。
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
每天進步一點點~~~