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; }
member this.DefaultBinder : System.Reflection.Binder
Public Shared ReadOnly Property DefaultBinder As Binder
Значение свойства
Ссылка на связыватель, используемый в системе по умолчанию.
Примеры
В следующем примере возвращается связыватель по умолчанию из DefaultBinder
Свойства и вызывается член MyClass путем передачи DefaultBinder
значения в качестве параметра в InvokeMember .
using namespace System;
using namespace System::Reflection;
ref class MyClass
{
public:
void HelloWorld()
{
Console::WriteLine( "Hello World" );
}
};
int main()
{
try
{
Binder^ defaultBinder = Type::DefaultBinder;
MyClass^ myClass = gcnew MyClass;
// Invoke the HelloWorld method of MyClass.
myClass->GetType()->InvokeMember( "HelloWorld", BindingFlags::InvokeMethod, defaultBinder, myClass, nullptr );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception : {0}", e->Message );
}
}
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");
}
}
}
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-разрядное целое число со знаком.
В следующей таблице перечислены преобразования, поддерживаемые связывателем по умолчанию.
Тип источника | Тип целевого объекта |
---|---|
Любой тип | Его базовый тип. |
Любой тип | Интерфейс, который он реализует. |
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, Single, Double |
Int32 | Int64, Single, Double |
UInt64 | Single, Double |
Int64 | Single, Double |
Single | Double |
Не является ссылкой | По ссылке. |