在一個(gè)服務(wù)實(shí)現(xiàn)內(nèi),有很多結(jié)構(gòu)相似,略微不同的函數(shù)。
Martin大師的諄諄告誡我們,可以使用Extract Method的方式進(jìn)行重構(gòu)。
本次練習(xí)的內(nèi)容主要是使用反射。
以零散知識(shí)點(diǎn)的形式記錄每一天的工作。
一般有兩種方式獲取類型:
1.1 typeof方式
var entityType = typeof(T);typeof(DataRow);
1.2 Type.GetType()方法
var daoType = dao.GetType();
用ConstructorInfo表示構(gòu)造函數(shù);
通過Type.GetConstructor()來獲得;
如:獲取有一個(gè)參數(shù)為DataRow類型的構(gòu)造函數(shù)
entityType.GetConstructor(new Type[] { typeof(DataRow) });用MethodInfo表示函數(shù)信息;
通過Type.GetMethod ()來獲得;
如:獲取有一個(gè)名稱為Get,且指定了特性參數(shù)類型的函數(shù)
var daoGetMethodInfo = daoType.GetMethod("Get", GetDaoGetMethodParameterTypes(exPRBpk).ToArray());這個(gè)是最常用的,就不多說了,如:
entityType.GetProperty(memberName);
另外,使用Expression<Func<T,object>> 傳遞參數(shù),好處就是可以獲得所有信息——代碼即數(shù)據(jù)。
如:expr = zw=>zw.StaffCode
var memberName = (expr.Body as MemberExpression).Member.Name; //表示StaffCodevar memberExprType = (expr.Body as MemberExpression).Type; //表示StaffCode的類型,為String
反射積累實(shí)踐:
枚舉類型的成員
實(shí)例化新對(duì)象
執(zhí)行對(duì)象的成員
查找類型的信息
查找程序集的信息
檢查應(yīng)用于某種類型的自定義特性
創(chuàng)建和編譯新程序集
每天進(jìn)步一點(diǎn)點(diǎn)~~~
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注