Sdílet prostřednictvím


Type.GetDefaultMembers Metoda

Definice

Vyhledá členy definované pro aktuální, Type jehož DefaultMemberAttribute sada je nastavena.

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()

Návraty

MemberInfo[]

Pole MemberInfo objektů reprezentující všechny výchozí členy aktuálního Type .

-nebo- Prázdné pole typu MemberInfo , pokud aktuální nemá Type výchozí členy.

Implementuje

Příklady

Následující příklad získá výchozí informace o členu pro MyClass a zobrazí výchozí členy.

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

Poznámky

GetDefaultMembersMetoda nevrací členy v určitém pořadí, jako je abecední nebo pořadí deklarace. Kód nesmí záviset na pořadí, ve kterém jsou členy vráceny, protože jejich pořadí se může měnit.

Tato metoda může být přepsána odvozenou třídou.

Členy obsahují vlastnosti, metody, pole, události a podobně.

Následující tabulka ukazuje, jaké členy základní třídy jsou vráceny Get metodami, pokud se odráží na typ.

Typ členu Static Nestatický
Konstruktor No No
Pole No Yes. Pole je vždy skrýváno podle názvu a podpisu.
Událost Neuvedeno Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže.
Metoda No Yes. Metody (virtuální i nevirtuální) mohou být skrývány podle názvu nebo podle názvu a podpisu.
Vnořený typ No No
Vlastnost Neuvedeno Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže.
  1. Skrývání podle názvu a podpisu bere v úvahu všechny části podpisu včetně vlastních modifikátorů, návratových typů, typů parametrů, sentinelů a nespravovaných konvencí volání. Jedná se o binární porovnání.

  2. Pro účely reflexe jsou vlastnosti a události skrývány podle názvu a podpisu. Má-li vlastnost v základní třídě přístupové metody get i set, ale odvozená třída má pouze přístupovou metodu get, vlastnost odvozené třídy skryje vlastnost základní třídy a nebudete mít k dispozici přístup k metodě set základní třídy.

  3. Vlastní atributy nejsou součástí systému společných typů.

Pokud aktuální Type představuje Konstruovaný obecný typ, vrátí tato metoda MemberInfo objekty s parametry typu nahrazenými odpovídajícími argumenty typu. Například pokud třída C<T> má vlastnost P , která vrací T , volání GetDefaultMembers C<int> funkce vrátí int P v jazyce C# ( Property P As Integer v Visual Basic).

Pokud aktuální Type představuje parametr typu v definici obecného typu nebo obecné metody, tato metoda vyhledá členy omezení třídy nebo členy, Object Pokud neexistuje omezení třídy.

Platí pro

Viz také