Type.GetDefaultMembers Método

Definición

Busca los miembros definidos para el actual Type cuyo DefaultMemberAttribute conjunto está establecido.

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

Devoluciones

Matriz de objetos que MemberInfo representa todos los miembros predeterminados del objeto actual Type.

O bien

Matriz vacía de tipo MemberInfo, si el objeto actual Type no tiene miembros predeterminados.

Implementaciones

Atributos

Ejemplos

En el ejemplo siguiente se obtiene la información de miembro predeterminada de MyClass y se muestran los miembros predeterminados.

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

Comentarios

El GetDefaultMembers método no devuelve miembros en un orden determinado, como orden alfabético o de declaración. El código no debe depender del orden en el que se devuelven los miembros, ya que ese orden varía.

Este método se puede invalidar mediante una clase derivada.

Los miembros incluyen propiedades, métodos, campos, eventos, etc.

En la tabla siguiente se muestra qué miembros de una clase base devuelven los métodos Get al reflexionar sobre un tipo.

Tipo de miembro Static No estático
Constructor No No
Campo No Yes. Un campo siempre se oculta según el nombre y la firma.
Event No aplicable La regla del sistema de tipos común es que la herencia es igual a la de los métodos que implementan la propiedad. La reflexión trata las propiedades como hide-by-name-and-signature. Vea la nota 2 a continuación.
Método No Yes. Un método (tanto virtual como no virtual) puede ocultarse por nombre o por nombre y firma.
Tipo anidado No No
Propiedad No aplicable La regla del sistema de tipos común es que la herencia es igual a la de los métodos que implementan la propiedad. La reflexión trata las propiedades como hide-by-name-and-signature. Vea la nota 2 a continuación.
  1. En ocultar por nombre y firma se tienen en cuenta todas las partes de la firma, incluidos modificadores personalizados, tipos de valor devuelto, tipos de parámetros, sentinels y convenciones de llamada no administradas. Se trata de una comparación binaria.

  2. En reflexión, las propiedades y eventos se ocultan por nombre y firma. Si tiene una propiedad con un descriptor de acceso get y set en la clase base, pero la clase derivada solo tiene un descriptor de acceso get, la propiedad de clase derivada oculta la propiedad de clase base y no podrá acceder al establecedor en la clase base.

  3. Los atributos personalizados no forman parte del sistema de tipos común.

Si el objeto actual Type representa un tipo genérico construido, este método devuelve los objetos con los MemberInfo parámetros de tipo reemplazados por los argumentos de tipo adecuados. Por ejemplo, si la clase C<T> tiene una propiedad P que devuelve T, llamando a GetDefaultMembers en C<int> devuelve int P en C# (Property P As Integer en Visual Basic).

Si el objeto actual Type representa un parámetro de tipo en la definición de un tipo genérico o un método genérico, este método busca en los miembros de la restricción de clase o en los miembros de Object si no hay ninguna restricción de clase.

Se aplica a

Consulte también