Type.GetDefaultMembers Método

Definição

Pesquisa os membros definidos para o atual Type cujo DefaultMemberAttribute está definido.

public:
 virtual cli::array <System::Reflection::MemberInfo ^> ^ GetDefaultMembers();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public virtual System.Reflection.MemberInfo[] GetDefaultMembers();
public virtual System.Reflection.MemberInfo[] GetDefaultMembers();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicEvents | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicNestedTypes | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member GetDefaultMembers : unit -> System.Reflection.MemberInfo[]
override this.GetDefaultMembers : unit -> System.Reflection.MemberInfo[]
abstract member GetDefaultMembers : unit -> System.Reflection.MemberInfo[]
override this.GetDefaultMembers : unit -> System.Reflection.MemberInfo[]
Public Overridable Function GetDefaultMembers () As MemberInfo()

Retornos

Uma matriz de MemberInfo objetos que representa todos os membros padrão do atual Type.

- ou -

Uma matriz vazia do tipo MemberInfo, se a atual Type não tiver membros padrão.

Implementações

Atributos

Exemplos

O exemplo a seguir obtém as informações de MyClass membro padrão e exibe os membros padrão.

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

[<DefaultMemberAttribute "Age">]
type MyClass() =
    member _.Name(s: string) = ()
    member _.Age 
        with get () =
            20
try
    let myType = typeof<MyClass>
    let memberInfoArray = myType.GetDefaultMembers()
    if memberInfoArray.Length > 0 then
        for memberInfoObj in memberInfoArray do
            printfn $"The default member name is: {memberInfoObj}"
    else
        printfn "No default members are available."
with
| :? InvalidOperationException as e ->
    printfn $"InvalidOperationException: {e.Message}"
| :? IOException as e ->
    printfn $"IOException: {e.Message}"
| e ->
    printfn $"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

Comentários

O GetDefaultMembers método não retorna membros em uma ordem específica, como ordem alfabética ou de declaração. Seu código não deve depender da ordem na qual os membros são retornados, pois essa ordem varia.

Esse método pode ser substituído por uma classe derivada.

Os membros incluem propriedades, métodos, campos, eventos e assim por diante.

A tabela a seguir mostra quais membros de uma classe base são retornados pelos métodos Get ao refletir sobre um tipo.

Tipo de Membro Static Não estático
Construtor Não Não
Campo Não Sim. Um campo permanece sempre oculto por nome e assinatura.
Acontecimento Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo.
Método Não Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura.
Tipo aninhado Não Não
Property Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo.
  1. Oculto por nome e assinatura considera todas as partes da assinatura, inclusive modificadores personalizados, tipos de retorno, tipos de parâmetro, sentinelas e convenções de chamada não gerenciadas. Essa é uma comparação binária.

  2. Para reflexão, propriedades e eventos permanecem ocultos por nome e assinatura. Se você tiver uma propriedade com um acessador get e um set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.

  3. Atributos personalizados não fazem parte do sistema de tipos comuns.

Se a corrente Type representar um tipo genérico construído, esse método retornará os MemberInfo objetos com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados. Por exemplo, se a classe C<T> tiver uma propriedade P que retorna T, chamar GetDefaultMembers em C<int> retornará int P em C# (Property P As Integer em Visual Basic).

Se a atual Type representa um parâmetro de tipo na definição de um tipo genérico ou método genérico, esse método pesquisa os membros da restrição de classe ou os membros de se não houver nenhuma restrição de Object classe.

Aplica-se a

Confira também