Type.GetDefaultMembers 方法

定义

搜索为设置了 Type 的当前 DefaultMemberAttribute 定义的成员。

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

返回

MemberInfo[]

表示当前 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 类的成员。

成员类型 静态 非静态
构造函数
字段 可以。 字段始终按名称和签名进行隐藏。
事件 不适用 常见类型系统规则是继承与实现 属性的方法的继承相同。 反射将属性视为按名称和签名进行隐藏。 请参阅下面的注释 2。
方法 可以。 一 (虚拟和非虚拟) 可以按名称隐藏,也可以按名称和签名进行隐藏。
嵌套类型
properties 不适用 常见类型系统规则是继承与实现 属性的方法的继承相同。 反射将属性视为按名称和签名进行隐藏。 请参阅下面的注释 2。
  1. "按名称隐藏"和"签名"考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、sentinels 以及非托管调用约定。 这是二进制比较。

  2. 对于反射,属性和事件按名称和签名进行隐藏。 如果属性在基类中同时具有 get 和 set 访问器,但派生类只有 get 访问器,则派生类属性将隐藏基类属性,并且你将无法访问基类上的 setter。

  3. 自定义属性不是通用类型系统的一部分。

如果当前 Type 表示构造的泛型类型,则此方法返回对象 MemberInfo ,类型参数替换为相应的类型参数。 例如,如果类具有返回 的属性,则调用 在 C# 中返回 , (C<T> P T 返回 GetDefaultMembers C<int> int P Property P As Integer Visual Basic) 。

如果当前 表示泛型类型或泛型方法的定义中的类型参数,则此方法将搜索类约束的成员;如果没有类约束,则此方法将搜索 Type Object 的成员。

适用于

产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.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
.NET Standard 2.0, 2.1

另请参阅