Type.DefaultBinder Свойство

Определение

Возвращает ссылку на привязку по умолчанию, которая реализует внутренние правила для выбора соответствующих элементов, вызываемых 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

Значение свойства

Ссылка на привязку по умолчанию, используемую системой.

Примеры

В следующем примере возвращается привязка по умолчанию из DefaultBinder свойства и вызывается член MyClass, передав DefaultBinder значение в качестве параметра 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

Комментарии

Привязка по умолчанию, предоставляемая средой CLR, применима во всех, но наиболее специализированных обстоятельствах. Если требуется привязка, которая соответствует правилам, которые отличаются от указанных привязок по умолчанию, определите тип, производный от Binder класса, и передайте экземпляр этого типа с помощью binder параметра одной из InvokeMember перегрузок.

Отражение моделирует правила специальных возможностей системы общих типов. Например, если вызывающий объект находится в той же сборке, вызывающий объект не нуждается в специальных разрешениях для внутренних членов. В противном случае вызывающему объекту требуется ReflectionPermission. Это соответствует поиску элементов, защищенных, частных и т. д.

Общий принцип заключается в том, что ChangeType следует выполнять только расширенные преобразования, которые никогда не теряют данные. Пример преобразования расширения — преобразование значения, которое является 32-разрядным целым числом со знаком в значение, которое является 64-разрядным целым числом со знаком. Это отличается от сужающегося преобразования, которое может потерять данные. Пример сужения преобразования преобразует 64-разрядное целое число со знаком в 32-разрядное целое число со знаком.

В следующей таблице перечислены преобразования, поддерживаемые привязчиком по умолчанию.

Тип источника Тип целевого объекта
Любой тип Базовый тип.
Любой тип Интерфейс, который он реализует.
Уголь Unt16, UInt32, Int32, UInt64, Int64, Single, Double
Байт 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, Single, Double
Int32 Int64, Single, Double
UInt64 Одинарный, Двойной
Int64 Одинарный, Двойной
Single Double
Не ссылающийся По ссылке.

Применяется к

См. также раздел