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 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");
        }	
    }
}
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

注釈

共通言語ランタイムで提供される既定のバインダーは、最も特殊な状況以外のすべての状況で適用できます。 指定された既定のバインダーとは異なる規則に従うバインダーが必要な場合は、 クラスから派生した型を Binder 定義し、オーバーロードの 1 つのパラメーターを使用してその 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
非参照 参照による。

適用対象

こちらもご覧ください