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 |
| Не ссылающийся | По ссылке. |