Leggere in inglese

Condividi tramite


Type.GetDefaultMembers Metodo

Definizione

Cerca i membri definiti per l'oggetto Type corrente per cui è impostato il DefaultMemberAttribute.

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

Restituisce

Matrice di oggetti MemberInfo che rappresentano tutti i membri predefiniti dell'oggetto Type corrente.

-oppure-

Matrice vuota di tipo MemberInfo, se per l'oggetto Type corrente non esistono membri predefiniti.

Implementazioni

Esempio

Nell'esempio seguente vengono ottenute le informazioni del membro predefinite di MyClass e vengono visualizzati i membri predefiniti.

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);
        }
    }
}

Commenti

Il GetDefaultMembers metodo non restituisce membri in un ordine specifico, ad esempio ordine alfabetico o dichiarazione. Il codice non deve dipendere dall'ordine in cui vengono restituiti i membri, perché tale ordine varia.

Questo metodo può essere sottoposto a override da una classe derivata.

I membri includono proprietà, metodi, campi, eventi e così via.

Nella tabella seguente vengono illustrati i membri di una classe base restituiti dai Get metodi quando si riflette su un tipo.

Tipo di membro Static Non statico
Costruttore No No
Campo No Sì. Un campo è sempre hide-by-name-and-signature.
Evento Non applicabile La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà. Reflection tratta le proprietà come hide-by-name-and-signature. Vedere la nota 2 seguente.
Metodo No Sì. Un metodo (sia virtuale che non virtuale) può essere hide-by-name o hide-by-name-and-signature.
Tipo annidato No No
Proprietà Non applicabile La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà. Reflection tratta le proprietà come hide-by-name-and-signature. Vedere la nota 2 seguente.
  1. Hide-by-name-and-signature considera tutte le parti della firma, inclusi modificatori personalizzati, tipi restituiti, tipi di parametri, sentinelle e convenzioni di chiamata non gestite. Si tratta di un confronto binario.

  2. Per la reflection, le proprietà e gli eventi sono nascondi per nome e firma. Se si dispone di una proprietà con una funzione di accesso get e un set nella classe base, ma la classe derivata ha solo una funzione di accesso get, la proprietà classe derivata nasconde la proprietà della classe base e non sarà possibile accedere al setter nella classe base.

  3. Gli attributi personalizzati non fanno parte del sistema di tipi comuni.

Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce gli oggetti con i MemberInfo parametri di tipo sostituiti dagli argomenti di tipo appropriati. Ad esempio, se la classe C<T> ha una proprietà P che restituisce , chiamata GetDefaultMembers su C<int> restituisce Tint P in C# (Property P As Integer in Visual Basic).

Se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o di un metodo generico, questo metodo cerca i membri del vincolo di classe o i membri di Object se non esiste alcun vincolo di classe.

Si applica a

Prodotto Versioni
.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

Vedi anche