System.Type.GetProperty 方法
本文提供此 API 參考文件的補充備註。
GetProperty(String) 方法
name
搜尋會區分大小寫。 搜尋包含公用靜態和公用實例屬性。
如果屬性至少有一個存取子是公用的,則會將其視為公用。 否則,屬性會被視為私用屬性,而且您必須使用 BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (在 Visual Basic 中,使用 結合 值 Or
來取得它。
如果目前的 Type 代表建構的泛型型別,這個方法會傳回 PropertyInfo ,其型別參數會由適當的型別自變數所取代。
如果目前的 Type 代表泛型型別或泛型方法定義中的型別參數,這個方法會搜尋類別條件約束的屬性。
發生的情況 AmbiguousMatchException 包括下列各項:
- 類型包含兩個具有相同名稱但不同參數數目的索引屬性。 若要解決模棱兩可的情況,請使用指定參數類型的方法多載 GetProperty 。
- 衍生類型會宣告屬性,這個屬性會使用
new
修飾詞 (Shadows
在 Visual Basic 中)隱藏具有相同名稱的繼承屬性。 若要解決模棱兩可的情況,請使用 GetProperty(String, BindingFlags) 方法多載並新增 BindingFlags.DeclaredOnly 旗標,將搜尋限制為未繼承的成員。
GetProperty(String, BindingFlags) 方法
如果屬性至少有一個存取子是公用的,則會將其視為公用。 否則,屬性會被視為私用屬性,而且您必須使用 BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (在 Visual Basic 中,使用 結合 值 Or
來取得它。
下列 BindingFlags 篩選旗標可用來定義要包含在搜尋中的屬性:
- 您必須指定
BindingFlags.Instance
或BindingFlags.Static
,才能取得傳回。 - 指定
BindingFlags.Public
以在搜尋中包含公用屬性。 - 指定
BindingFlags.NonPublic
以在搜尋中包含非公用屬性(也就是私用、內部和受保護的屬性)。 - 指定要
BindingFlags.FlattenHierarchy
在public
階層中包含和protected
靜態成員;private
繼承類別中的靜態成員不包含在內。
下列 BindingFlags 修飾詞旗標可用來變更搜尋的運作方式:
BindingFlags.IgnoreCase
忽略的案例name
。BindingFlags.DeclaredOnly
表示只搜尋 在上 Type宣告的屬性,而不是只繼承的屬性。
如需相關資訊,請參閱 System.Reflection.BindingFlags 。
如果目前的 Type 代表建構的泛型型別,這個方法會傳回 PropertyInfo ,其型別參數會由適當的型別自變數所取代。
如果目前的 Type 代表泛型型別或泛型方法定義中的型別參數,這個方法會搜尋類別條件約束的屬性。
發生的情況 AmbiguousMatchException 包括下列各項:
- 類型包含兩個具有相同名稱但不同參數數目的索引屬性。 若要解決模棱兩可的情況,請使用指定參數類型的方法多載 GetProperty 。
- 衍生類型會宣告屬性,這個屬性會使用
new
修飾詞 (Shadows
在 Visual Basic 中)隱藏具有相同名稱的繼承屬性。 若要解決模棱兩可的情況,請包含 BindingFlags.DeclaredOnly 以將搜尋限制為未繼承的成員。
GetProperty(System.String,System.反思離子。BindingFlags,System。反思。Binder,System.Type,System.Type[],System.反思。ParameterModifier[])
如果屬性至少有一個存取子是公用的,則會將其視為公用。 否則,屬性會被視為私用屬性,而且您必須使用 BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (在 Visual Basic 中,使用 結合 值 Or
來取得它。
雖然預設系結器不會處理 ParameterModifier ( modifiers
參數),但您可以使用抽象 System.Reflection.Binder 類來撰寫會處理 modifiers
的自定義系結器。 ParameterModifier
只有在透過 COM Interop 呼叫,而且只會處理以傳址方式傳遞的參數時使用。
下表顯示基類的成員在反映類型時,方法會 Get
傳回哪些成員。
成員類型 | Static | 非靜態 |
---|---|---|
建構函式 | No | 否 |
欄位 | No | 是。 欄位一律為依名稱和簽章隱藏。 |
Event | 不適用 | 常見的類型系統規則是繼承與實作 屬性的方法相同。 反思 ion 會將屬性視為 hide-by-name-and-signature。2 |
方法 | No | 是。 方法(虛擬和非虛擬)可以是依名稱隱藏或依名稱和簽章隱藏。 |
巢狀類型 | No | No |
屬性 | 不適用 | 常見的類型系統規則是繼承與實作 屬性的方法相同。 反思 ion 會將屬性視為 hide-by-name-and-signature。2 |
注意:
- 依名稱和簽章隱藏會考慮簽章的所有部分,包括自定義修飾詞、傳回類型、參數類型、sentinels 和 Unmanaged 呼叫慣例。 這是二進位比較。
- 針對反映,屬性和事件是依名稱與簽章隱藏。 如果您的屬性在基類中同時具有 get 和 set 存取子,但衍生類別只有 get 存取子,衍生類別屬性會隱藏基類屬性,而且您將無法存取基類上的 setter。
- 自訂屬性不是一般類型系統的一部分。
下列 BindingFlags 篩選旗標可用來定義要包含在搜尋中的屬性:
- 您必須指定
BindingFlags.Instance
或BindingFlags.Static
,才能取得傳回。 - 指定
BindingFlags.Public
以在搜尋中包含公用屬性。 - 指定
BindingFlags.NonPublic
以在搜尋中包含非公用屬性(也就是私用、內部和受保護的屬性)。 - 指定要
BindingFlags.FlattenHierarchy
在public
階層中包含和protected
靜態成員;private
繼承類別中的靜態成員不包含在內。
下列 BindingFlags 修飾詞旗標可用來變更搜尋的運作方式:
BindingFlags.IgnoreCase
忽略的案例name
。BindingFlags.DeclaredOnly
表示只搜尋 在上 Type宣告的屬性,而不是只繼承的屬性。
如需相關資訊,請參閱 System.Reflection.BindingFlags 。
如果目前的 Type 代表建構的泛型型別,這個方法會傳回 PropertyInfo ,其型別參數會由適當的型別自變數所取代。
如果目前的 Type 代表泛型型別或泛型方法定義中的型別參數,這個方法會搜尋類別條件約束的屬性。
索引器和預設屬性
Visual Basic、C# 和 C++ 已簡化語法來存取索引屬性,並允許一個索引屬性為其類型預設值。 例如,如果變數 myList
參考 ArrayList,則語法 myList[3]
(myList(3)
在 Visual Basic 中) 會擷取索引為 3 的專案。 您可以多載 屬性。
在 C# 中,這項功能稱為索引器,無法依名稱參照。 根據預設,C# 索引器會在元數據中顯示為名為 的 Item
索引屬性。 不過,類別庫開發人員可以使用 IndexerNameAttribute 屬性來變更元數據中的索引器名稱。 例如,類別 String 具有名為的 Chars[]索引器。 使用 C# 以外的語言所建立的索引屬性也可以具有 以外的 Item
名稱。
若要判斷類型是否具有預設屬性,請使用 GetCustomAttributes(Type, Boolean) 方法來測試 DefaultMemberAttribute 屬性。 如果類型具有 DefaultMemberAttribute,則 MemberName 屬性會傳回預設屬性的名稱。