Type.DefaultBinder Propiedad

Definición

Obtiene una referencia al enlazador predeterminado, que implementa reglas internas para seleccionar los miembros adecuados a los que llamará InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]).

public:
 static property System::Reflection::Binder ^ DefaultBinder { System::Reflection::Binder ^ get(); };
public static System.Reflection.Binder DefaultBinder { get; }
static member DefaultBinder : System.Reflection.Binder
Public Shared ReadOnly Property DefaultBinder As Binder

Valor de propiedad

Referencia al enlazador predeterminado usado por el sistema.

Ejemplos

En el ejemplo siguiente se obtiene el enlazador predeterminado de la DefaultBinder propiedad e invoca a un miembro de MyClass pasando el DefaultBinder valor como parámetro a InvokeMember.

using System;
using System.Reflection;

public class MyDefaultBinderSample
{
    public static void Main()
    {
        try
        {
            Binder defaultBinder = Type.DefaultBinder;
            MyClass myClass = new MyClass();
            // Invoke the HelloWorld method of MyClass.
            myClass.GetType().InvokeMember("HelloWorld", BindingFlags.InvokeMethod,
                defaultBinder, myClass, new object [] {});
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception :" + e.Message);
        }
    }	

    class MyClass
    {
        public void HelloWorld()
        {
            Console.WriteLine("Hello World");
        }	
    }
}
open System
open System.Reflection

type MyClass() =
    member _.HelloWorld() =
        printfn "Hello World"

try
    let defaultBinder = Type.DefaultBinder
    let myClass = MyClass()
    // Invoke the HelloWorld method of MyClass.
    myClass.GetType().InvokeMember("HelloWorld", BindingFlags.InvokeMethod, defaultBinder, myClass, [||])
    |> ignore
with e ->
    printfn $"Exception: {e.Message}"
Imports System.Reflection

Public Class MyDefaultBinderSample
    Public Shared Sub Main()
        Try
            Dim defaultBinder As Binder = Type.DefaultBinder
            Dim [myClass] As New [MyClass]()
            ' Invoke the HelloWorld method of MyClass.
            [myClass].GetType().InvokeMember("HelloWorld", BindingFlags.InvokeMethod, defaultBinder, [myClass], New Object() {})
        Catch e As Exception
            Console.WriteLine("Exception :" + e.Message.ToString())
        End Try
    End Sub

    Class [MyClass]

        Public Sub HelloWorld()
            Console.WriteLine("Hello World")
        End Sub
    End Class
End Class

Comentarios

El enlazador predeterminado proporcionado con Common Language Runtime es aplicable en todas las circunstancias más especializadas. Si necesita un enlazador que siga las reglas que difieren de las del enlazador predeterminado proporcionado, defina un tipo derivado de la Binder clase y pase una instancia de ese tipo mediante el binder parámetro de una de las InvokeMember sobrecargas.

La reflexión modela las reglas de accesibilidad del sistema de tipos comunes. Por ejemplo, si el autor de la llamada está en el mismo ensamblado, el autor de la llamada no necesita permisos especiales para los miembros internos. De lo contrario, el autor de la llamada necesita ReflectionPermission. Esto es coherente con la búsqueda de miembros protegidos, privados, etc.

El principio general es que ChangeType solo debe realizar conversiones de ampliación, que nunca pierden datos. Un ejemplo de una conversión de ampliación es convertir un valor que es un entero de 32 bits con signo en un valor que es un entero de 64 bits con signo. Esto se distingue de una conversión de restricción, que puede perder datos. Un ejemplo de una conversión de restricción consiste en convertir un entero de 64 bits con signo en un entero de 32 bits con signo.

En la tabla siguiente se enumeran las conversiones admitidas por el enlazador predeterminado.

Tipo origen Tipo de destino
Cualquier tipo Su tipo base.
Cualquier tipo La interfaz que implementa.
Char Unt16, UInt32, Int32, UInt64, Int64, Single, Double
byte Char, Unt16, Int16, UInt32, Int32, UInt64, Int64, Single, Double
SByte Int16, Int32, Int64, Single, Double
UInt16 UInt32, Int32, UInt64, Int64, Single, Double
Int16 Int32, Int64, Single, Double
UInt32 UInt64, Int64, Simple, Doble
Int32 Int64, Simple, Doble
UInt64 Sencillo, Doble
Int64 Sencillo, Doble
Single Double
No referencia Por referencia.

Se aplica a

Consulte también