Type.DefaultBinder Property
Assembly: mscorlib (in mscorlib.dll)
The default binder provided with the common language runtime is applicable in all but the most specialized circumstances. If you need a binder that follows rules that differ from those of the supplied default binder, define a type derived from the Binder class and pass an instance of that type using the binder parameter of one of the InvokeMember overloads.
Reflection models the accessibility rules of the common type system. For example, if the caller is in the same assembly, the caller does not need special permissions for internal members. Otherwise, the caller needs ReflectionPermission. This is consistent with lookup of members that are protected, private, and so on.
The general principle is that ChangeType should perform only widening conversions, which never lose data. An example of a widening conversion is converting a value that is a 32-bit signed integer to a value that is a 64-bit signed integer. This is distinguished from a narrowing conversion, which may lose data. An example of a narrowing conversion is converting a 64-bit signed integer to a 32-bit signed integer.
The following table lists the conversions supported by the default binder.
| Source Type | Target Type |
|---|---|
| Any type | Its base type. |
| Any type | The interface it implements. |
| 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 |
| Non-reference | By-reference. |
The following example gets the default binder from the DefaultBinder property, and invokes a member of MyClass by passing the DefaultBinder value as a parameter to 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 ); } }
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 Server 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
The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.