Type.DefaultBinder 属性
获取默认联编程序的引用,该程序实现的内部规则用于选择由 InvokeMember 调用的合适成员。
**命名空间:**System
**程序集:**mscorlib(在 mscorlib.dll 中)
语法
声明
Public Shared ReadOnly Property DefaultBinder As Binder
用法
Dim value As Binder
value = Type.DefaultBinder
public static Binder DefaultBinder { get; }
public:
static property Binder^ DefaultBinder {
Binder^ get ();
}
/** @property */
public static Binder get_DefaultBinder ()
public static function get DefaultBinder () : Binder
属性值
系统使用的默认联编程序的引用。
备注
公共语言运行库提供的默认联编程序适用于除了几种极个别情况之外的所有情况。如果需要一个联编程序,该程序遵守的规则与所提供的默认联编程序的规则不同,则可定义一个从 Binder 类派生的类型,并使用 InvokeMember 重载之一的 binder 参数传递该类型的实例。
“反射”建立通用类型系统的可访问规则模型。例如,如果调用方在相同的程序集内,则它不需要内部成员的特殊权限。否则,调用方需要 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 |
非引用 |
通过引用。 |
示例
下面的示例从 DefaultBinder 属性 (Property) 获取默认联编程序,然后通过将 DefaultBinder 值作为参数传递到 InvokeMember 来调用 MyClass 的成员。
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
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 'Main
Class [MyClass]
Public Sub HelloWorld()
Console.WriteLine("Hello World")
End Sub 'HelloWorld
End Class '[MyClass]
End Class 'MyDefaultBinderSample
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");
}
}
}
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 );
}
}
import System.*;
import System.Reflection.*;
public class MyDefaultBinderSample
{
public static void main(String[] args)
{
try {
Binder defaultBinder = Type.get_DefaultBinder();
MyClass myClass = new MyClass();
// Invoke the HelloWorld method of MyClass.
myClass.GetType().InvokeMember("HelloWorld",
BindingFlags.InvokeMethod, defaultBinder, myClass,
new Object[] {});
}
catch (System.Exception e) {
Console.WriteLine("Exception :" + e.get_Message());
}
} //main
static class MyClass
{
public void HelloWorld()
{
Console.WriteLine("Hello World");
} //HelloWorld
} //MyClass
} //MyDefaultBinderSample
平台
Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0
.NET Compact Framework
受以下版本支持:2.0、1.0