透過 .NET Reflection 存取私有成員
在特定情況下,利用反射來存取 .NET 物件中的私有欄位已被證明是有益的。本指南說明如何使用反射從類別中檢索私有欄位 _bar
,儘管其具有私有存取修飾符。
透過反射檢索欄位
.NET Reflection API 提供 GetFields()
方法,傳回給定類型的 FieldInfo
物件陣列。 預設情況下,僅傳回公共欄位。要存取私有字段,我們必須指定適當的綁定標誌。
了解綁定標誌
綁定標誌控制哪些成員包含在反射操作中。對於私有欄位訪問,我們需要:
BindingFlags.NonPublic
: 包含非公用成員(私有、內部、受保護)。 BindingFlags.Instance
: 包含實例欄位(與靜態欄位相對)。 程式碼範例:存取私有欄位
存取 _bar
類別的私有 Foo
欄位:
<code class="language-csharp">Type myType = typeof(Foo); FieldInfo[] fields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance); foreach (FieldInfo field in fields) { // Example: Check for a custom attribute if (field.IsDefined(typeof(SomeAttribute), false)) { Console.WriteLine($"Found private field: {field.Name}"); } }</code>
重要提示:屬性檢查用於示範。 反射允許檢索所有欄位資訊(類型、值、修飾符等)。 請記住,直接存取私有成員可能會破壞封裝,應謹慎使用。
以上是如何在.NET中使用反射存取私有欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!