1. 程式人生 > >(轉)C#反射使用時注意BindingFlags的用法

(轉)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