一、
bindingflags
(繫結約束):
指定控制繫結和由反射執行的成員和型別搜尋方法的標誌。
其列舉按功能可分為如下3種
1.可訪問性標識
呼叫type
的getmembers
,genestedtypes
,getfields
,getconstructors
,getmethods
,getproperties
或者getevents
來查詢乙個型別的成員時,可以使用
bindingflags
實參指定搜尋符號。
如果呼叫無此引數的過載版本那麼
bindingflags
取預設值
public|instance|static
,即只返回公共成員。
default
不指定繫結標誌。
ignorecase
不區分大小寫搜尋指定字串匹配的成員
ignorereturn 在
com
互操作中用於指定可以忽略成員的返回值。
fattenhierarchy
返回基型別定義的公共靜態成員和受保護的靜態成員。(靜態成員包括字段、方法、事件和屬性。不返回巢狀型別)
declaredonly
只返回被反射的那個型別的成員,忽略繼承的成員
instance
返回例項成員
static
返回靜態成員
public
返回公共成員
nonpublic
返回非公共成員
2.繫結引數標識
exactbinding
繫結器查詢其形參型別與傳遞的實參型別必須完全一致的成員。
如果呼叫方提供乙個非空
binder
物件,則「反射」將引發異常,因為這意味著呼叫方正在提供的
bindto***
實現將選取適當的方法。
optionalparambinding
返回其引數計數與提供引數的數目匹配的成員集。如果一些成員的引數具有預設值,或者一些方法要獲取數量可變的實參,這個引數就有用了。只有
type
的invokemember
方法才支援這個標誌。
3.操作標識
invokemethod
指定要呼叫乙個方法。它不能是建構函式或型別初始值設定項。
createinstance
指定建立乙個新物件並呼叫其構造器
getfield
指定應返回指定欄位的值
setfield
指定應設定指定欄位的值
getproperty
指定應呼叫屬性的
get
訪問器方法
setproperty
指定應呼叫屬性的
set
訪問器方法
對於com
屬性,指定此繫結標誌與指定
putdispproperty
和putrefdispproperty
是等效的,如果
com
屬性同時具有
propput
和propputref
,而且需要區分呼叫哪乙個,則使用對應的
putdispproperty
或putrefdispproperty
。putdispproperty
指定應呼叫
com
物件的propput
成員。propput
指定【使用值的屬性】設定函式。
putrefdispproperty
指定應呼叫
com
物件的propputref
成員。propputref
指定【使用引用】設定函式。
在「操作」標識中大多數標識都是互斥的,只可同時指定
getfield
和getproperty
標識,這時的
invokemember
繫結行為是:先查詢乙個匹配的字段,如果沒有找到匹配的字段,就查詢乙個匹配的屬性。(
setfield
和getproperty
類似)
一、membertypes(
成員型別)
呼叫type
的findmembers
,getmember
搜尋成員時,需要傳入
membertypes
標識,用於決定要查詢的
memberinfo
的成員型別,如限定為
建構函式、事件、自定義成員型別等等。
(9)程式集的載入和反射
字串轉列舉(兩個列舉型別)
剛剛遇到的問難 很簡單的方法,記下以備以後檢視方便 public enum colcr1 red,yellow public enum colcr2 green,bule string str string a 111 public aa if enum.isdefinde typeof color...
用反射機制合併兩個Protobuf
對於protobuf的合併操作,官方api提供了mergefrom函式。如 pd1.mergefrom pb2 該方法對於非repeated型別,優先使用pb2,對於repeated型別,就是將兩個欄位的值取並集,並且無法去重。有時無法滿足我們的專案需求。我們可以使用protobuf的google ...
python 兩個列表元素過濾的幾個簡寫方法
正在優化約數,對乙個數的約數結果進行分析 8008 0.5 89.487429284788374682747794919658 但是8008 2002 4 2002 2 2 那麼他其實只需要計算出2002的約數,在與4或者2進行怎樣的組合就可以了,於是分析8008和2002的約數規律 2002的約數...