(轉)C#反射使用時注意BindingFlags的用法
c#反射查詢方法時,預設只能查到public方法。如果想要查詢private方法,需要設定BindingFlags.
即:
BindingFlags.Public|BindingFlags.Instance 預設查詢public、instance內容
BindingFlags.NonPublic|BindingFlags.Instance 查詢nonpublic、instance內容
另外,BindingFlags.Instance和BindingFlags.Static二者必須有一項或者都有。如果你的類是instance,就選instance,反之選static。如果兩者都不選,是找不到任何方法的
BindingFlags列舉值:
BindingFlags.IgnoreCase:表示忽略 name 的大小寫,不應考慮成員名的大小寫
BindingFlags.DeclaredOnly:只應考慮在所提供型別的層次結構級別上宣告的成員。不考慮繼承成員。
BindingFlags.Instance:只搜尋例項成員
BindingFlags.Static:只搜尋靜態成員
BindingFlags.Public:只搜尋公共成員
BindingFlags.NonPublic:只搜尋非公共成員
BindingFlags.FlattenHierarchy:應返回層次結構上的公共靜態成員和受保護的靜態成員。不返回繼承類中的私有靜態成員。靜態成員包括欄位、方法、事件和屬性。不返回巢狀型別。
BindingFlags.InvokeMethod:表示呼叫方法,而不呼叫建構函式或型別初始值設定項。對 SetField 或 SetProperty 無效。
BindingFlags.CreateInstance:表示呼叫建構函式。忽略 name。對其他呼叫標誌無效。
BindingFlags.GetField:表示獲取欄位值。
BindingFlags.SetField:表示設定欄位值。
BindingFlags.GetProperty:表示獲取屬性。
BindingFlags.SetProperty:表示設定屬性。
文章轉載自:https://blog.csdn.net/weixin_38109688/article/details/80147535、https://blog.csdn.net/whaxrl/article/details/48542139