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

请参见

参考

Type 类
Type 成员
System 命名空间
Binder