InvokeMember 使用

函数原型:  <?xml namespace="" ns="urn:schemas-microsoft-com:office:office" prefix="o" ?>

  public object InvokeMember(string, BindingFlags, Binder, object, object[]);

  string:你所要调用的函数名 

  BindingFlags:你所要调用的函数的属性,可以组合 

  Binder:高级内容,可以先不看 

  object:调用该成员函数的实例 

  object[]:参数, 

  下面是msdn例子: 

  //调用公有静态成员函数(不带参数) 

  Type t = typeof (TestClass);

  t.InvokeMember ("SayHello", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, null, new object [] {});

        

  //调用实例的函数(不带参数),第三个参数为该实例 

  TestClass c = new TestClass ();

  c.GetType().InvokeMember ("AddUp", BindingFlags.Public | BindingFlags.InvokeMethod, null, c, new object [] {});

  c.GetType().InvokeMember ("AddUp", BindingFlags.Public | BindingFlags.InvokeMethod, null, c, new object [] {});

        

  //调用带参数的函数, 

  //方法是:将你的所有参数都放到一个object的数组里面 

  object [] args = new object [] {100.09, 184.45};

  object result;

  result = t.InvokeMember ("ComputeSum", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, null, args);

  Console.WriteLine ("{0} + {1} = {2}", args[0], args[1], result);

        

  //获得一个属性值 

  result = t.InvokeMember ("Name", BindingFlags.Public | BindingFlags.GetField, null, c, new object [] {});

  Console.WriteLine ("Name == {0}", result);

        

  //设定一个属性值 

  t.InvokeMember ("Name", BindingFlags.Public |BindingFlags.SetField, null, c, new object [] {"NewName"});

  result = t.InvokeMember ("Name", BindingFlags.Public |BindingFlags.GetField, null, c, new object [] {});

  Console.WriteLine ("Name == {0}", result);

        

  //获得一个下标属性值([] 

  int   index = 3;

  result = t.InvokeMember ("Item", BindingFlags.Public |BindingFlags.GetProperty , null, c, new object [] {index});

  Console.WriteLine ("Item[{0}] == {1}", index, result);

        

  //设定一个下标属性值([] 

  index = 3;

  t.InvokeMember ("Item", BindingFlags.Public |BindingFlags.SetProperty, null, c, new object [] {index, "NewValue"});

  result = t.InvokeMember ("Item", BindingFlags.Public |BindingFlags.GetProperty , null, c, new object [] {index});

  Console.WriteLine ("Item[{0}] == {1}", index, result);

        

  //获得一个属性或者是成员变量的值 

  //也就是,假设有一个类是这样的: 

  //class temp{

  // public string name;  

  // public string Name{  

  //   get{return name;}

  //   set {name=value}

  // }

  //}

  //那么通过一下语句就可获得Name的值, 

  result = t.InvokeMember ("Name", BindingFlags.Public |BindingFlags.GetField | BindingFlags.GetProperty, null, c, new object [] {});

  Console.WriteLine ("Name == {0}", result);

  //通过一下,语句可以获得name的值 

  result = t.InvokeMember ("name", BindingFlags.Public |BindingFlags.GetField | BindingFlags.GetProperty, null, c, new object [] {});

  Console.WriteLine ("Value == {0}", result);

        

  //调用一个函数,使用参数名对应的参数 

  object[] argValues = new object [] {"Mouse", "Micky"};

  String [] argNames = new String [] {"lastName", "firstName"};

  t.InvokeMember ("PrintName", BindingFlags.Public |BindingFlags.InvokeMethod, null, null, argValues, null, null, argNames);

        

  //调用一个类型的默认函数,好像在C#里面没有默认成员函数 

  Type t3 = typeof (TestClass2);

  t3.InvokeMember ("", BindingFlags.Public |BindingFlags.InvokeMethod, null, new TestClass2(), new object [] {});

        

  //Invoking a ByRef member

  MethodInfo m = t.GetMethod("Swap");

  args = new object[2];

  args[0] = 1;

  args[1] = 2;

  m.Invoke(new TestClass(),args);

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gooer/archive/2008/09/14/2927113.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值