Type.GetDefaultMembers Méthode

Définition

Recherche les membres définis pour le Type actuel dont le DefaultMemberAttribute est défini.

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

Retours

MemberInfo[]

Tableau d'objets MemberInfo représentant tous les membres par défaut du Type actuel.

  • ou - Tableau vide du type MemberInfo si le Type actuel n'a pas de membres par défaut.

Implémente

Exemples

L’exemple suivant obtient les informations de membre par défaut de MyClass et affiche les membres par défaut.

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

Remarques

La GetDefaultMembers méthode ne retourne pas de membres dans un ordre particulier, par exemple par ordre alphabétique ou par ordre de déclaration. Votre code ne doit pas dépendre de l’ordre dans lequel les membres sont retournés, car cet ordre varie.

Cette méthode peut être substituée par une classe dérivée.

Les membres incluent des propriétés, des méthodes, des champs, des événements, etc.

Le tableau suivant indique les membres d’une classe de base qui sont retournés par les Get méthodes lors de la réflexion sur un type.

Type de membre statique Non statique
Constructeur Non Non
Champ Non Oui. Un champ est toujours masqué par nom-et-signature.
Événement Non applicable La règle de système de type commun est que l’héritage est le même que celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme étant masquées-par-nom-et-signature. Voir la remarque 2 ci-dessous.
Méthode Non Oui. Une méthode (à la fois virtuelles et non virtuelles) peut être masquée ou masquée-par-nom-et-signature.
Type imbriqué Non Non
Propriété Non applicable La règle de système de type commun est que l’héritage est le même que celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme étant masquées-par-nom-et-signature. Voir la remarque 2 ci-dessous.
  1. Hide-by-Name-and-signature prend en compte toutes les parties de la signature, y compris les modificateurs personnalisés, les types de retour, les types de paramètres, les sentinelles et les conventions d’appel non managées. Il s’agit d’une comparaison binaire.

  2. Pour la réflexion, les propriétés et les événements sont masqués par nom et signature. Si vous avez une propriété avec un accesseur get et un accesseur set dans la classe de base, mais que la classe dérivée a uniquement un accesseur Get, la propriété de la classe dérivée masque la propriété de la classe de base, et vous ne pouvez pas accéder à la méthode setter sur la classe de base.

  3. Les attributs personnalisés ne font pas partie du système de type commun.

Si le actuel Type représente un type générique construit, cette méthode retourne les MemberInfo objets avec les paramètres de type remplacés par les arguments de type appropriés. Par exemple, si C<T> la classe a une propriété P qui retourne T , GetDefaultMembers l’appel de sur C<int> retourne int P en C# ( Property P As Integer en Visual Basic).

Si le actuel Type représente un paramètre de type dans la définition d’un type générique ou d’une méthode générique, cette méthode recherche les membres de la contrainte de classe ou les membres de Object s’il n’y a aucune contrainte de classe.

S’applique à

Voir aussi