Type.GetDefaultMembers 方法

定義

搜尋定義給目前 Type 的成員,而它的 DefaultMemberAttribute 已設定。

C#
public virtual System.Reflection.MemberInfo[] GetDefaultMembers();

傳回

MemberInfo 物件的陣列,代表目前 Type 的所有預設成員。

-或-

MemberInfo 類型的空陣列 (如果目前 Type 沒有預設成員)。

實作

範例

下列範例會取得 的預設成員資訊 MyClass ,並顯示預設成員。

C#
using System;
using System.Reflection;
using System.IO;

[DefaultMemberAttribute("Age")]
public class MyClass
{
    public void Name(String s) {}
    public int Age
    {
        get
        {
            return 20;
        }
    }
    public static void Main()
    {
        try
        {
            Type  myType = typeof(MyClass);
            MemberInfo[] memberInfoArray = myType.GetDefaultMembers();
            if (memberInfoArray.Length > 0)
            {
                foreach(MemberInfo memberInfoObj in memberInfoArray)
                {
                    Console.WriteLine("The default member name is: " + memberInfoObj.ToString());
                }
            }
            else
            {
                Console.WriteLine("No default members are available.");
            }
        }
        catch(InvalidOperationException e)
        {
            Console.WriteLine("InvalidOperationException: " + e.Message);
        }
        catch(IOException e)
        {
            Console.WriteLine("IOException: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }
}

備註

方法 GetDefaultMembers 不會以特定順序傳回成員,例如字母順序或宣告順序。 您的程式碼不得取決於傳回成員的順序,因為該順序會有所不同。

這個方法可由衍生類別覆寫。

成員包括屬性、方法、欄位、事件等等。

下表顯示當反映類型時,方法會 Get 傳回的基類成員。

成員類型 Static 非靜態
建構函式
欄位 可以。 欄位一律會依名稱與簽章隱藏。
事件 不適用 常見的型別系統規則是繼承與實作 屬性的方法相同。 反映會將屬性視為 hide-by-name-and-signature。 請參閱下面的附注 2。
方法 可以。 (虛擬和非虛擬) 的方法可以是依名稱隱藏或依名稱隱藏和簽章。
巢狀類型
屬性 不適用 常見的型別系統規則是繼承與實作 屬性的方法相同。 反映會將屬性視為 hide-by-name-and-signature。 請參閱下面的附注 2。
  1. 依名稱與簽章隱藏會考慮簽章的所有部分,包括自訂修飾詞、傳回類型、參數類型、sentinels 和 Unmanaged 呼叫慣例。 這是二進位比較。

  2. 針對反映,屬性和事件會依名稱與簽章隱藏。 如果您的屬性同時具有基類中的 get 和 set 存取子,但衍生類別只有 get 存取子,衍生類別屬性會隱藏基類屬性,而且您將無法在基類上存取 setter。

  3. 自訂屬性不是一般型別系統的一部分。

如果目前的 Type 表示已建構的泛型型別,這個方法會傳回 MemberInfo 物件,其型別參數會由適當的型別引數所取代。 例如,如果 類別 C<T> 具有傳回 的屬性 P ,請在 Visual Basic) 中呼叫 C<int>GetDefaultMembers C# (Property P As Integer 傳回 Tint P

如果目前的 Type 代表泛型型別或泛型方法定義中的型別參數,這個方法會搜尋類別條件約束的成員,如果沒有類別條件約束,則為 的成員 Object

適用於

產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

另請參閱