Type.GetDefaultMembers Метод

Определение

Выполняет поиск членов, определенных для текущего объекта Type, для которого задан атрибут DefaultMemberAttribute.

public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetDefaultMembers();
public virtual System.Reflection.MemberInfo[] GetDefaultMembers ();
abstract member GetDefaultMembers : unit -> System.Reflection.MemberInfo[]
override this.GetDefaultMembers : unit -> System.Reflection.MemberInfo[]
Public Overridable Function GetDefaultMembers () As MemberInfo()

Возвращаемое значение

MemberInfo[]

Массив объектов MemberInfo, представляющий все члены по умолчанию текущего объекта Type.

-или- Пустой массив типа MemberInfo, если у текущего типа Type нет членов по умолчанию.

Реализации

Примеры

Следующий пример получает сведения об элементе по умолчанию MyClass и отображает элементы по умолчанию.

using namespace System;
using namespace System::Reflection;
using namespace System::IO;

[DefaultMemberAttribute("Age")]
public ref class MyClass
{
public:
   void Name( String^ s ){}


   property int Age 
   {
      int get()
      {
         return 20;
      }

   }

};

int main()
{
   try
   {
      Type^ myType = MyClass::typeid;
      array<MemberInfo^>^memberInfoArray = myType->GetDefaultMembers();
      if ( memberInfoArray->Length > 0 )
      {
         System::Collections::IEnumerator^ myEnum = memberInfoArray->GetEnumerator();
         while ( myEnum->MoveNext() )
         {
            MemberInfo^ memberInfoObj = safe_cast<MemberInfo^>(myEnum->Current);
            Console::WriteLine( "The default member name is: {0}", memberInfoObj );
         }
      }
      else
      {
         Console::WriteLine( "No default members are available." );
      }
   }
   catch ( InvalidOperationException^ e ) 
   {
      Console::WriteLine( "InvalidOperationException: {0}", e->Message );
   }
   catch ( IOException^ e ) 
   {
      Console::WriteLine( "IOException: {0}", e->Message );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}

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);
        }
    }
}
Imports System.Reflection
Imports System.IO

<DefaultMemberAttribute("Age")> Public Class [MyClass]

    Public Sub Name(ByVal s As String)
    End Sub

    Public ReadOnly Property Age() As Integer
        Get
            Return 20
        End Get
    End Property

    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType([MyClass])
            Dim memberInfoArray As MemberInfo() = myType.GetDefaultMembers()
            If memberInfoArray.Length > 0 Then
                Dim memberInfoObj As MemberInfo
                For Each memberInfoObj In memberInfoArray
                    Console.WriteLine("The default member name is: " + memberInfoObj.ToString())
                Next memberInfoObj
            Else
                Console.WriteLine("No default members are available.")
            End If
        Catch e As InvalidOperationException
            Console.WriteLine("InvalidOperationException: " + e.Message)
        Catch e As IOException
            Console.WriteLine("IOException: " + e.Message)
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message)
        End Try
    End Sub
End Class

Комментарии

GetDefaultMembersМетод не возвращает элементы в определенном порядке, например алфавит или порядок объявления. Код не должен зависеть от порядка, в котором возвращаются элементы, так как этот порядок меняется.

Этот метод может быть переопределен производным классом.

Элементы включают свойства, методы, поля, события и т. д.

В следующей таблице показано, какие члены базового класса возвращаются Get методами при отражении в типе.

Тип члена Статические Не статический
Конструктор Нет Нет
Поле Нет Да. Поле всегда скрывается по имени и сигнатуре.
Событие Неприменимо Правило системы общих типов — это то же наследование, что и методы, реализующие свойство. Отражение рассматривает свойства как скрытые по имени и сигнатуре. См. Примечание 2 ниже.
Метод Нет Да. Метод (как виртуальный, так и невиртуальный) может быть скрыт по имени или скрытию по имени и сигнатуре.
Вложенный тип Нет Нет
Свойство. Неприменимо Правило системы общих типов — это то же наследование, что и методы, реализующие свойство. Отражение рассматривает свойства как скрытые по имени и сигнатуре. См. Примечание 2 ниже.
  1. При скрытии по имени и сигнатуре учитываются все части сигнатуры, включая пользовательские модификаторы, возвращаемые типы, типы параметров, Sentinel и неуправляемые соглашения о вызовах. Это двоичное сравнение.

  2. Для отражения свойства и события скрываются по имени и сигнатуре. Если у вас есть свойство с методом доступа get и Set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.

  3. Настраиваемые атрибуты не являются частью системы общих типов.

Если текущий объект Type представляет сконструированный универсальный тип, этот метод возвращает MemberInfo объекты с параметрами типа, замененными соответствующими аргументами типа. Например, если класс C<T> имеет свойство P , которое возвращает T , вызов метода GetDefaultMembers On C<int> Returns int P в C# ( Property P As Integer в Visual Basic).

Если Current Type представляет параметр типа в определении универсального типа или универсального метода, этот метод выполняет поиск членов ограничения класса или членов, Object Если ограничение класса отсутствует.

Применяется к

См. также раздел