BindingFlags Enumeration
This enumeration has a FlagsAttribute attribute that allows a bitwise combination of its member values.
Namespace: System.ReflectionAssembly: mscorlib (in mscorlib.dll)
'Declaration <SerializableAttribute> _ <ComVisibleAttribute(True)> _ <FlagsAttribute> _ Public Enumeration BindingFlags 'Usage Dim instance As BindingFlags
/** @attribute SerializableAttribute() */ /** @attribute ComVisibleAttribute(true) */ /** @attribute FlagsAttribute() */ public enum BindingFlags
SerializableAttribute ComVisibleAttribute(true) FlagsAttribute public enum BindingFlags
| Member name | Description | |
|---|---|---|
![]() | CreateInstance | Specifies that Reflection should create an instance of the specified type. Calls the constructor that matches the given arguments. The supplied member name is ignored. If the type of lookup is not specified, (Instance | Public) will apply. It is not possible to call a type initializer. |
![]() | DeclaredOnly | Specifies that only members declared at the level of the supplied type's hierarchy should be considered. Inherited members are not considered. |
![]() | Default | Specifies no binding flag. |
![]() | ExactBinding | Specifies that types of the supplied arguments must exactly match the types of the corresponding formal parameters. Reflection throws an exception if the caller supplies a non-null Binder object, since that implies that the caller is supplying BindToXXX implementations that will pick the appropriate method. 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 coercions, which never lose data. An example of a widening coercion is coercing 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 coercion, which may lose data. An example of a narrowing coercion is coercing a 64-bit signed integer to a 32-bit signed integer. The default binder ignores this flag, while custom binders can implement the semantics of this flag. |
![]() | FlattenHierarchy | Specifies that public and protected static members up the hierarchy should be returned. Private static members in inherited classes are not returned. Static members include fields, methods, events, and properties. Nested types are not returned. |
![]() | GetField | Specifies that the value of the specified field should be returned. |
![]() | GetProperty | Specifies that the value of the specified property should be returned. |
![]() | IgnoreCase | Specifies that the case of the member name should not be considered when binding. |
![]() | IgnoreReturn | Used in COM interop to specify that the return value of the member can be ignored. |
![]() | Instance | Specifies that instance members are to be included in the search. |
![]() | InvokeMethod | Specifies that a method is to be invoked. This may not be a constructor or a type initializer. |
![]() | NonPublic | Specifies that non-public members are to be included in the search. |
![]() | OptionalParamBinding | Returns the set of members whose parameter count matches the number of supplied arguments. This binding flag is used for methods with parameters that have default values and methods with variable arguments (varargs). This flag should only be used with Type.InvokeMember. Parameters with default values are used only in calls where trailing arguments are omitted. They must be the last arguments. |
![]() | Public | Specifies that public members are to be included in the search. |
![]() | PutDispProperty | Specifies that the PROPPUT member on a COM object should be invoked. PROPPUT specifies a property-setting function that uses a value. Use PutDispProperty if a property has both PROPPUT and PROPPUTREF and you need to distinguish which one is called. |
![]() | PutRefDispProperty | Specifies that the PROPPUTREF member on a COM object should be invoked. PROPPUTREF specifies a property-setting function that uses a reference instead of a value. Use PutRefDispProperty if a property has both PROPPUT and PROPPUTREF and you need to distinguish which one is called. |
![]() | SetField | Specifies that the value of the specified field should be set. |
![]() | SetProperty | Specifies that the value of the specified property should be set. For COM properties, specifying this binding flag is equivalent to specifying PutDispProperty and PutRefDispProperty. |
![]() | Static | Specifies that static members are to be included in the search. |
![]() | SuppressChangeType | Not implemented. |
These BindingFlags control binding for a great many classes in the System, System.Reflection, and System.Runtime namespaces that invoke, create, get, set, and find members and types.
BindingFlags are used in the following Type methods and other places such as MethodBase.Invoke :
-
MethodBase.Invoke
InvokeMember and GetMethod are especially important.
The binding flags can be categorized by how they identify a type member, as listed in the following table.
| Identified by Accessibility | Identified by Binding Argument | Identified by Operation |
|---|---|---|
| Static | GetField SetField GetProperty SetProperty |
Note |
|---|
| You must specify Instance or Static along with Public or NonPublic or no members will be returned. |
The following table lists the coercions performed by the default Binder.ChangeType. This table applies especially to the ExactBinding binding flag.
| Source Type | Target Type |
|---|---|
| Any type | Its base type. |
| Any type | The interface it implements. |
| Char | UInt16, UInt32, Int32, UInt64, Int64, Single, Double |
| Byte | Char, UInt16, 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 demonstrates each binding flag.
Imports System Imports System.Reflection Imports System.IO Class EntryPoint Overloads Shared Sub Main(ByVal args() As String) Invoke.Go() End Sub 'Main End Class 'EntryPoint Class Invoke Public Shared Sub Go() ' BindingFlags.InvokeMethod ' Call a static method. Dim t As Type = GetType(TestClass) Console.WriteLine() Console.WriteLine("Invoking a static method.") Console.WriteLine("-------------------------") t.InvokeMember("SayHello", BindingFlags.InvokeMethod, Nothing, Nothing, New Object() {}) ' BindingFlags.InvokeMethod ' Call an instance method. Dim c As New TestClass() Console.WriteLine() Console.WriteLine("Invoking an instance method.") Console.WriteLine("----------------------------") c.GetType().InvokeMember("AddUp", BindingFlags.InvokeMethod, Nothing, c, New Object() {}) c.GetType().InvokeMember("AddUp", BindingFlags.InvokeMethod, Nothing, c, New Object() {}) ' BindingFlags.InvokeMethod ' Call a method with parameters. Dim args() As Object = {100.09, 184.45} Dim result As Object Console.WriteLine() Console.WriteLine("Invoking a method with parameters.") Console.WriteLine("---------------------------------") result = t.InvokeMember("ComputeSum", BindingFlags.InvokeMethod, Nothing, Nothing, args) Console.WriteLine("{0} + {1} = {2}", args(0), args(1), result) ' BindingFlags.GetField, SetField Console.WriteLine() Console.WriteLine("Invoking a field (getting and setting.)") Console.WriteLine("--------------------------------------") ' Get a field value. result = t.InvokeMember("Name", BindingFlags.GetField, Nothing, c, New Object() {}) Console.WriteLine("Name == {0}", result) ' Set a field. t.InvokeMember("Name", BindingFlags.SetField, Nothing, c, New Object() {"NewName"}) result = t.InvokeMember("Name", BindingFlags.GetField, Nothing, c, New Object() {}) Console.WriteLine("Name == {0}", result) Console.WriteLine() Console.WriteLine("Invoking an indexed property (getting and setting.)") Console.WriteLine("--------------------------------------------------") ' BindingFlags.GetProperty ' Get an indexed property value. Dim index As Integer = 3 result = t.InvokeMember("Item", BindingFlags.GetProperty, Nothing, c, New Object() {index}) Console.WriteLine("Item[{0}] == {1}", index, result) ' BindingFlags.SetProperty ' Set an indexed property value. index = 3 t.InvokeMember("Item", BindingFlags.SetProperty, Nothing, c, New Object() {index, "NewValue"}) result = t.InvokeMember("Item", BindingFlags.GetProperty, Nothing, c, New Object() {index}) Console.WriteLine("Item[{0}] == {1}", index, result) Console.WriteLine() Console.WriteLine("Getting a field or property.") Console.WriteLine("----------------------------") ' BindingFlags.GetField ' Get a field or property. result = t.InvokeMember("Name", BindingFlags.GetField Or BindingFlags.GetProperty, Nothing, c, New Object() {}) Console.WriteLine("Name == {0}", result) ' BindingFlags.GetProperty result = t.InvokeMember("Value", BindingFlags.GetField Or BindingFlags.GetProperty, Nothing, c, New Object() {}) Console.WriteLine("Value == {0}", result) Console.WriteLine() Console.WriteLine("Invoking a method with named parameters.") Console.WriteLine("---------------------------------------") ' BindingFlags.InvokeMethod ' Call a method using named parameters. Dim argValues() As Object = {"Mouse", "Micky"} Dim argNames() As [String] = {"lastName", "firstName"} t.InvokeMember("PrintName", BindingFlags.InvokeMethod, Nothing, Nothing, argValues, Nothing, Nothing, argNames) Console.WriteLine() Console.WriteLine("Invoking a default member of a type.") Console.WriteLine("------------------------------------") ' BindingFlags.Default ' Call the default member of a type. Dim t3 As Type = GetType(TestClass2) t3.InvokeMember("", BindingFlags.InvokeMethod Or BindingFlags.Default, Nothing, New TestClass2(), New Object() {}) Console.WriteLine() Console.WriteLine("Invoking a method by reference.") Console.WriteLine("-------------------------------") ' BindingFlags.Static, NonPublic, and Public ' Invoking a member by reference. Dim m As MethodInfo = t.GetMethod("Swap") args = New Object(1) {} args(0) = 1 args(1) = 2 m.Invoke(New TestClass(), args) Console.WriteLine("{0}, {1}", args(0), args(1)) ' The string is case-sensitive. Dim type As Type = type.GetType("System.String") ' Check to see if the value is valid. If the object is null, the type does not exist. If type Is Nothing Then Console.WriteLine("Please ensure that you specify only valid types in the type field.") Console.WriteLine("The type name is case-sensitive.") Return End If ' Declare and populate the arrays to hold the information. ' You must declare either NonPublic or Public with Static or the search will not work. Dim fi As FieldInfo() = type.GetFields((BindingFlags.Static Or BindingFlags.NonPublic Or BindingFlags.Public)) ' BindingFlags.NonPublic Dim miNonPublic As MethodInfo() = type.GetMethods((BindingFlags.Static Or BindingFlags.NonPublic)) ' BindingFlags.Public Dim miPublic As MethodInfo() = type.GetMethods((BindingFlags.Static Or BindingFlags.Public)) ' Iterate through all the nonpublic methods. Dim method As MethodInfo For Each method In miNonPublic Console.WriteLine(method) Next method ' Iterate through all the public methods. For Each method In miPublic Console.WriteLine(method) Next method ' Iterate through all the fields. Dim f As FieldInfo For Each f In fi Console.WriteLine(f) Next f ' Call an instance method. Dim tc As New TestClass() Console.WriteLine() Console.WriteLine("Invoking an Instance method.") Console.WriteLine("----------------------------") tc.GetType().InvokeMember("AddUp", BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, tc, New Object() {}) ' BindingFlags.CreateInstance ' Calling and creating an instance method. Console.WriteLine() Console.WriteLine("Invoking and creating an instance method.") Console.WriteLine("-----------------------------------------") tc.GetType().InvokeMember("AddUp", BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, tc, New Object() {}) ' BindingFlags.DeclaredOnly Dim tc2 As New TestClass() Console.WriteLine() Console.WriteLine("DeclaredOnly members") Console.WriteLine("---------------------------------") Dim memInfo As System.Reflection.MemberInfo() = tc2.GetType().GetMembers(BindingFlags.DeclaredOnly) Dim i As Integer For i = 0 To memInfo.Length - 1 Console.WriteLine(memInfo(i).Name) Next i ' BindingFlags.SuppressChangeType Dim obj As New TestClass() Console.WriteLine() Console.WriteLine("Invoking static method - PrintName") Console.WriteLine("---------------------------------") Dim methInfo As System.Reflection.MethodInfo = obj.GetType().GetMethod("PrintName") methInfo.Invoke(obj, BindingFlags.SuppressChangeType Or BindingFlags.InvokeMethod, Nothing, New Object() {"Brad", "Smith"}, Nothing) ' BindingFlags.IgnoreCase Console.WriteLine() Console.WriteLine("Using IgnoreCase and invoking the PrintName method.") Console.WriteLine("---------------------------------------------------") methInfo = obj.GetType().GetMethod("PrintName") methInfo.Invoke(obj, BindingFlags.IgnoreCase Or BindingFlags.InvokeMethod, Nothing, New Object() {"brad", "smith"}, Nothing) ' BindingFlags.IgnoreReturn Console.WriteLine() Console.WriteLine("Using IgnoreReturn and invoking the PrintName method.") Console.WriteLine("-----------------------------------------------------") methInfo = obj.GetType().GetMethod("PrintName") methInfo.Invoke(obj, BindingFlags.IgnoreReturn Or BindingFlags.InvokeMethod, Nothing, New Object() {"Brad", "Smith"}, Nothing) ' BindingFlags.OptionalParamBinding Console.WriteLine() Console.WriteLine("Using OptionalParamBinding and invoking the PrintName method.") Console.WriteLine("-------------------------------------------------------------") methInfo = obj.GetType().GetMethod("PrintName") methInfo.Invoke(obj, BindingFlags.OptionalParamBinding Or BindingFlags.InvokeMethod, Nothing, New Object() {"Brad", "Smith"}, Nothing) ' BindingFlags.ExactBinding Console.WriteLine() Console.WriteLine("Using ExactBinding and invoking the PrintName method.") Console.WriteLine("-----------------------------------------------------") methInfo = obj.GetType().GetMethod("PrintName") methInfo.Invoke(obj, BindingFlags.ExactBinding Or BindingFlags.InvokeMethod, Nothing, New Object() {"Brad", "Smith"}, Nothing) ' BindingFlags.FlattenHierarchy Console.WriteLine() Console.WriteLine("Using FlattenHierarchy and invoking the PrintName method.") Console.WriteLine("---------------------------------------------------------") methInfo = obj.GetType().GetMethod("PrintName") methInfo.Invoke(obj, BindingFlags.FlattenHierarchy Or BindingFlags.InvokeMethod, Nothing, New Object() {"Brad", "Smith"}, Nothing) End Sub 'Go End Class 'Invoke Public Class TestClass Public Name As [String] Private values() As [Object] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Default Public Property Item(ByVal index As Integer) As [Object] Get Return values(index) End Get Set(ByVal Value As [Object]) values(index) = Value End Set End Property Public ReadOnly Property Value() As [Object] Get Return "the value" End Get End Property Public Sub New() Name = "initialName" End Sub 'New Private methodCalled As Integer = 0 Public Shared Sub SayHello() Console.WriteLine("Hello") End Sub 'SayHello Public Sub AddUp() methodCalled += 1 Console.WriteLine("AddUp Called {0} times", methodCalled) End Sub 'AddUp Public Shared Function ComputeSum(ByVal d1 As Double, ByVal d2 As Double) As Double Return d1 + d2 End Function 'ComputeSum Public Shared Sub PrintName(ByVal firstName As [String], ByVal lastName As [String]) Console.WriteLine("{0},{1}", lastName, firstName) End Sub 'PrintName Public Sub PrintTime() Console.WriteLine(DateTime.Now) End Sub 'PrintTime Public Sub Swap(ByRef a As Integer, ByRef b As Integer) Dim x As Integer = a a = b b = x End Sub 'Swap End Class 'TestClass <DefaultMemberAttribute("PrintTime")> _ Public Class TestClass2 Public Sub PrintTime() Console.WriteLine(DateTime.Now) End Sub 'PrintTime End Class 'TestClass2
package BindingFlagsSnippet;
import System.*;
import System.Reflection.*;
import System.IO.*;
class EntryPoint
{
public static void main(String[] args)
{
Invoke.Go();
} //main
} //EntryPoint
class Invoke
{
public static void Go()
{
// BindingFlags.InvokeMethod
// Call a static method.
Type t = TestClass.class.ToType();
Console.WriteLine();
Console.WriteLine("Invoking a static method.");
Console.WriteLine("-------------------------");
t.InvokeMember("SayHello", BindingFlags.InvokeMethod, null, null,
new Object[]{});
// BindingFlags.InvokeMethod
// Call an instance method.
TestClass c = new TestClass();
Console.WriteLine();
Console.WriteLine("Invoking an instance method.");
Console.WriteLine("----------------------------");
c.GetType().InvokeMember("AddUp", BindingFlags.InvokeMethod, null, c,
new Object[]{});
c.GetType().InvokeMember("AddUp", BindingFlags.InvokeMethod, null, c,
new Object[]{});
// BindingFlags.InvokeMethod
// Call a method with parameters.
Object args[] = new Object[] { (System.Double)100.09,
(System.Double)184.45 };
Object result;
Console.WriteLine();
Console.WriteLine("Invoking a method with parameters.");
Console.WriteLine("---------------------------------");
result = t.InvokeMember("ComputeSum", BindingFlags.InvokeMethod, null,
null, args);
Console.WriteLine("{0} + {1} = {2}", args[0], args[1], result);
// BindingFlags.GetField, SetField
Console.WriteLine();
Console.WriteLine("Invoking a field (getting and setting.)");
Console.WriteLine("--------------------------------------");
// Get a field value.
result = t.InvokeMember("name", BindingFlags.GetField, null, c,
new Object[]{});
Console.WriteLine("name == {0}", result);
// Set a field.
t.InvokeMember("name", BindingFlags.SetField, null, c,
new Object[] { "NewName" });
result = t.InvokeMember("name", BindingFlags.GetField, null, c,
new Object[]{});
Console.WriteLine("name == {0}", result);
Console.WriteLine();
Console.WriteLine("Invoking an indexed property (getting and setting.)");
Console.WriteLine("--------------------------------------------------");
// BindingFlags.GetProperty
// Get an indexed property value.
int index = 3;
result = t.InvokeMember("Item", BindingFlags.GetProperty, null, c,
new Object[] { (Int32)index });
Console.WriteLine("Item[{0}] == {1}", (Int32)index, result);
// BindingFlags.SetProperty
// Set an indexed property value.
index = 3;
t.InvokeMember("Item", BindingFlags.SetProperty, null, c,
new Object[] { (Int32)index, "NewValue" });
result = t.InvokeMember("Item", BindingFlags.GetProperty, null, c,
new Object[] { (Int32)index });
Console.WriteLine("Item[{0}] == {1}", (Int32)index, result);
Console.WriteLine();
Console.WriteLine("Getting a field or property.");
Console.WriteLine("----------------------------");
// BindingFlags.GetField
// Get a field or property.
result = t.InvokeMember("name",
BindingFlags.GetField | BindingFlags.GetProperty, null, c,
new Object[]{});
Console.WriteLine("name == {0}", result);
// BindingFlags.GetProperty
result = t.InvokeMember("Value",
BindingFlags.GetField | BindingFlags.GetProperty, null, c,
new Object[]{});
Console.WriteLine("Value == {0}", result);
Console.WriteLine();
Console.WriteLine("Invoking a method with named parameters.");
Console.WriteLine("---------------------------------------");
// BindingFlags.InvokeMethod
// Call a method using named parameters.
Object argValues[] = new Object[] { "Mouse", "Micky" };
String argNames[] = new String[] { "lastName", "firstName" };
t.InvokeMember("PrintName", BindingFlags.InvokeMethod, null, null,
argValues, null, null, argNames);
Console.WriteLine();
Console.WriteLine("Invoking a default member of a type.");
Console.WriteLine("------------------------------------");
// BindingFlags.Default
// Call the default member of a type.
Type t3 = TestClass2.class.ToType();
t3.InvokeMember("", BindingFlags.InvokeMethod | BindingFlags.Default,
null, new TestClass2(), new Object[]{});
// BindingFlags.Static, NonPublic, and Public
// Invoking a member by reference.
Console.WriteLine();
Console.WriteLine("Invoking a method by reference.");
Console.WriteLine("-------------------------------");
MethodInfo m = t.GetMethod("Swap");
args = new Object[2];
args[0] = (Int32)1;
args[1] = (Int32)2;
m.Invoke(new TestClass(), args);
Console.WriteLine("{0}, {1}", args[0], args[1]);
// The string is case-sensitive.
Type type = Type.GetType("System.String");
// Check to see if the value is valid. If the object is null,
// the type does not exist.
if (type == null) {
Console.WriteLine("Please ensure that you specify only valid types "
+ "in the type field.");
Console.WriteLine("The type name is case-sensitive.");
return;
}
// Declare and populate the arrays to hold the information.
// You must declare either NonPublic or Public with Static or the
// search will not work.
FieldInfo fi[] = type.GetFields(
BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
// BindingFlags.NonPublic
MethodInfo miNonPublic[] = type.GetMethods(
BindingFlags.Static | BindingFlags.NonPublic);
// BindingFlags.Public
MethodInfo miPublic[] = type.GetMethods(
BindingFlags.Static | BindingFlags.Public);
// Iterate through all the nonpublic methods.
for (int iCtr = 0; iCtr < miNonPublic.length; iCtr++) {
MethodInfo method = (MethodInfo)miNonPublic.get_Item(iCtr);
Console.WriteLine(method);
}
// Iterate through all the public methods.
for (int iCtr = 0; iCtr < miPublic.length; iCtr++) {
MethodInfo method = (MethodInfo)miPublic.get_Item(iCtr);
Console.WriteLine(method);
}
// Iterate through all the fields.
for (int iCtr = 0; iCtr < fi.length; iCtr++) {
FieldInfo f = (FieldInfo)fi.get_Item(iCtr);
Console.WriteLine(f);
}
// BindingFlags.Instance
// Call an instance method.
TestClass tc = new TestClass();
Console.WriteLine();
Console.WriteLine("Invoking an Instance method.");
Console.WriteLine("----------------------------");
tc.GetType().InvokeMember("AddUp", BindingFlags.Public
| BindingFlags.Instance | BindingFlags.CreateInstance, null, tc,
new Object[]{});
// BindingFlags.CreateInstance
// Calling and creating an instance method.
Console.WriteLine();
Console.WriteLine("Invoking and creating an instance method.");
Console.WriteLine("-----------------------------------------");
tc.GetType().InvokeMember("AddUp", BindingFlags.Public
| BindingFlags.Instance | BindingFlags.CreateInstance, null, tc,
new Object[]{});
// BindingFlags.DeclaredOnly
TestClass tc2 = new TestClass();
Console.WriteLine();
Console.WriteLine("DeclaredOnly members");
Console.WriteLine("---------------------------------");
System.Reflection.MemberInfo memInfo[] = tc2.GetType().
GetMembers(BindingFlags.DeclaredOnly);
for (int i = 0; i < memInfo.length; i++) {
Console.WriteLine(((System.Reflection.MemberInfo)memInfo.
get_Item(i)).get_Name());
}
// BindingFlags.SuppressChangeType
TestClass obj = new TestClass();
Console.WriteLine();
Console.WriteLine("Invoking static method - PrintName");
Console.WriteLine("---------------------------------");
System.Reflection.MethodInfo methInfo = obj.GetType().
GetMethod("PrintName");
methInfo.Invoke(obj,
BindingFlags.SuppressChangeType | BindingFlags.InvokeMethod, null,
new Object[] { "Brad", "Smith" }, null);
// BindingFlags.IgnoreCase
Console.WriteLine();
Console.WriteLine("Using IgnoreCase and invoking the PrintName method.");
Console.WriteLine("---------------------------------------------------");
methInfo = obj.GetType().GetMethod("PrintName");
methInfo.Invoke(obj,
BindingFlags.IgnoreCase | BindingFlags.InvokeMethod, null,
new Object[] { "brad", "smith" }, null);
// BindingFlags.IgnoreReturn
Console.WriteLine();
Console.WriteLine("Using IgnoreReturn and invoking the PrintName "
+ "method.");
Console.WriteLine("----------------------------------------------"
+ "-------");
methInfo = obj.GetType().GetMethod("PrintName");
methInfo.Invoke(obj,
BindingFlags.IgnoreReturn | BindingFlags.InvokeMethod, null,
new Object[] { "Brad", "Smith" }, null);
// BindingFlags.OptionalParamBinding
Console.WriteLine();
Console.WriteLine("Using OptionalParamBinding and invoking the "
+ "PrintName method.");
Console.WriteLine("-------------------------------------------------"
+ "------------");
methInfo = obj.GetType().GetMethod("PrintName");
methInfo.Invoke(obj,
BindingFlags.OptionalParamBinding | BindingFlags.InvokeMethod,
null, new Object[] { "Brad", "Smith" }, null);
// BindingFlags.ExactBinding
Console.WriteLine();
Console.WriteLine("Using ExactBinding and invoking the PrintName "
+ "method.");
Console.WriteLine("-------------------------------------------------"
+ "----");
methInfo = obj.GetType().GetMethod("PrintName");
methInfo.Invoke(obj,
BindingFlags.ExactBinding | BindingFlags.InvokeMethod, null,
new Object[] { "Brad", "Smith" }, null);
// BindingFlags.FlattenHierarchy
Console.WriteLine();
Console.WriteLine("Using FlattenHierarchy and invoking the PrintName "
+ "method.");
Console.WriteLine("---------------------------------------------------"
+ "------");
methInfo = obj.GetType().GetMethod("PrintName");
methInfo.Invoke(obj,
BindingFlags.FlattenHierarchy | BindingFlags.InvokeMethod, null,
new Object[] { "Brad", "Smith" }, null);
} //Go
} //Invoke
public class TestClass
{
public String name;
private Object values[] = new Object[] { (Int32)0, (Int32)1, (Int32)2,
(Int32)3, (Int32)4, (Int32)5, (Int32)6, (Int32)7, (Int32)8, (Int32)9 };
/** @property
*/
public Object get_Item(int index)
{
return values.get_Item(index);
} //get_Item
/** @property
*/
public void set_Item(int index, Object value)
{
values.set_Item(index, value);
} //set_Item
/** @property
*/
public Object get_Value()
{
return "the value";
} //get_Value
public TestClass()
{
name = "initialName";
} //TestClass
private int methodCalled = 0;
public static void SayHello()
{
Console.WriteLine("Hello");
} //SayHello
public void AddUp()
{
methodCalled++;
Console.WriteLine("AddUp Called {0} times", (Int32)methodCalled);
} //AddUp
public static double ComputeSum(double d1, double d2)
{
return d1 + d2;
} //ComputeSum
public static void PrintName(String firstName, String lastName)
{
Console.WriteLine("{0},{1}", lastName, firstName);
} //PrintName
public void PrintTime()
{
Console.WriteLine(DateTime.get_Now());
} //PrintTime
public void Swap(int a, int b)
{
int x = a;
a = b;
b = x;
} //Swap
} //TestClass
/** @attribute DefaultMemberAttribute("PrintTime")
*/
public class TestClass2
{
public void PrintTime()
{
Console.WriteLine(DateTime.get_Now());
} //PrintTime
} //TestClass2
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
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.
