- 举例:
- Type tDate = typeof(System.DateTime);
- Object result = tDate.InvokeMember("Now",
- BindingFlags.GetProperty, null, null, new Object[0]);
- Console.WriteLine(result.ToString());
- 例2: /*注意:下面备注的方法都是其他类的方法,比如:TestClass类方法*/
- TestClass tc = new TestClass (); //AddUp为tc的方法
- tc.GetType().InvokeMember ("AddUp", BindingFlags.Public |
- BindingFlags.Instance | BindingFlags.CreateInstance,
- null, tc, new object [] {});
- /*
- public void AddUp ()
- {
- methodCalled++;
- Console.WriteLine ("AddUp Called {0} times", methodCalled);
- }
- */
- //----------------------------下面传参数 执行ComputeSum方法 带有两个参数
- Type t = typeof (TestClass);
- object [] args = new object [] {100.09, 184.45};
- object result = t.InvokeMember ("ComputeSum", BindingFlags.InvokeMethod, null, null, args);
- /*
- public static double ComputeSum (double d1, double d2)
- {
- return d1 + d2;
- }
- */
- //-----------SayHello为静态方法调用
- t.InvokeMember ("SayHello", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new object [] {});
- //-----------实例方法调用
- TestClass c = new TestClass ();
- c.GetType().InvokeMember ("AddUp", BindingFlags.InvokeMethod, null, c, new object [] {});
- c.GetType().InvokeMember ("AddUp", BindingFlags.Public |
- BindingFlags.Instance | BindingFlags.CreateInstance,
- null, c, new object [] {});
- //----------获取字段
- result = t.InvokeMember ("Name", BindingFlags.GetField | BindingFlags.GetProperty, null, c, new object [] {});
- result = t.InvokeMember ("Value", BindingFlags.GetField | BindingFlags.GetProperty, null, c, new object [] {});
- /*
- public String Name;
- public Object Value
- {
- get
- {
- return "the value";
- }
- }
- */
- result = t.InvokeMember ("Name", BindingFlags.GetField, null, c, new object [] {});
- //---------设置字段
- t.InvokeMember ("Name", BindingFlags.SetField, null, c, new object [] {"NewName"}); //NewName设置的属性值
- //---------调用类方法 带参数
- object[] argValues = new object [] {"Mouse", "Micky"};
- String [] argNames = new String [] {"lastName", "firstName"};
- t.InvokeMember ("PrintName", BindingFlags.InvokeMethod, null, null, argValues, null, null, argNames);
- /*
- public static void PrintName (String firstName, String lastName)
- {
- Console.WriteLine ("{0},{1}", lastName,firstName);
- }
- */
- TestClass obj = new TestClass();
- System.Reflection.MethodInfo methInfo =
- obj.GetType().GetMethod("PrintName");
- methInfo.Invoke(obj,BindingFlags.SuppressChangeType |
- BindingFlags.InvokeMethod, null,new object[]
- {"Brad","Smith"},null);
- methInfo = obj.GetType().GetMethod("PrintName");
- methInfo.Invoke(obj,BindingFlags.IgnoreCase | //忽略大小写 指定当绑定时不应考虑成员名的大小写
- BindingFlags.InvokeMethod, null,new object[]
- {"brad","smith"},null);
- methInfo = obj.GetType().GetMethod("PrintName");
- methInfo.Invoke(obj,BindingFlags.IgnoreReturn | // 在 COM interop 中用于指定可以忽略成员的返回值
- BindingFlags.InvokeMethod, null,new object[]
- {"Brad","Smith"},null);
- methInfo = obj.GetType().GetMethod("PrintName");
- methInfo.Invoke(obj,BindingFlags.OptionalParamBinding |
- BindingFlags.InvokeMethod, null,new object[]
- {"Brad","Smith"},null);
- // BindingFlags.ExactBinding
- methInfo = obj.GetType().GetMethod("PrintName");
- methInfo.Invoke(obj,BindingFlags.ExactBinding |
- BindingFlags.InvokeMethod, null,new object[]
- {"Brad","Smith"},null);
- // BindingFlags.FlattenHierarchy
- methInfo = obj.GetType().GetMethod("PrintName");
- methInfo.Invoke(obj,BindingFlags.FlattenHierarchy |
- BindingFlags.InvokeMethod, null,new object[]
- {"Brad","Smith"},null);
- //----------调用一个默认的方法
- Type t3 = typeof (TestClass2);
- /*
- [DefaultMemberAttribute ("PrintTime")]
- public class TestClass2
- {
- public void PrintTime ()
- {
- Console.WriteLine (DateTime.Now);
- }
- }
- */
- t3.InvokeMember ("", BindingFlags.InvokeMethod | BindingFlags.Default, null, new TestClass2(), new object [] {});
- //---------调用一个引用方法
- MethodInfo m = t.GetMethod("Swap");
- args = new object[2];
- args[0] = 1;
- args[1] = 2;
- m.Invoke(new TestClass(),args);
- /*
- public void Swap(ref int a, ref int b) 交换 a b
- {
- int x = a;
- a = b;
- b = x;
- }
- */