c# Type.InvokeMember用法

转载 2015年07月09日 16:46:50
函数原型:
 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);

Type InvokeMember()用法简介

Type InvokeMember()用法简介
  • W3031213101
  • W3031213101
  • 2010年08月30日 17:53
  • 11156

InvokeMember 使用

函数原型:       public   object   InvokeMember(string,   BindingFlags,   Binder,   object,   object[]); ...
  • gooer
  • gooer
  • 2008年09月14日 10:31
  • 8867

使用反射动态调用类成员,需要Type类的一个方法:InvokeMember。对该方法的声明如下(摘抄于MSDN):

使用反射动态调用类成员,需要Type类的一个方法:InvokeMember。对该方法的声明如下(摘抄于MSDN): public object InvokeMember(    string na...
  • zjlovety
  • zjlovety
  • 2011年12月03日 23:40
  • 2548

c#-Invoke反射简单举例

c#-Invoke反射简单举例 一个最简单的C#反射实例,首先编写类库如下: namespace ReflectionTest {  public class WriteTest ...
  • zhangbp
  • zhangbp
  • 2012年11月13日 21:42
  • 10985

c# 类的反射实例 (GetType().Invoke().GetMethod().CreateInstance())

Class1和Form 窗体在同一个命名空间 [c-sharp] view plaincopy using System;   using Sys...
  • lvjin110
  • lvjin110
  • 2014年01月15日 10:14
  • 7053

详解C#中的反射

http://blog.csdn.net/educast/article/details/2894892 反射(Reflection) 2008年01月02日 星期三 11:21 ...
  • OnafioO
  • OnafioO
  • 2015年10月08日 16:53
  • 3132

.NET中如何在调用COM时得到返回参数值System.Type.InvokeMember的使用

在调用COM组件接口的时候,我们一般使用Type.InvokeMember()的方法来调用。Type.InvokeMember()在调用的时候需要接受一个Object类型的数组来传递接口的参数信息。对...
  • suiyunonghen
  • suiyunonghen
  • 2009年12月03日 12:43
  • 2463

C#多线程处理webbrowser及InvokeMember(click)无响应的问题

多线程处理webbrowser的相关问题,并解决触发click事件,js无响应问题。 最近刚好碰上一个需求:循环遍历网页元素,找到innerText为指定的内容时,就模拟人工点击。 解决办法:使用...
  • cuoban
  • cuoban
  • 2014年12月07日 17:49
  • 830

利用dynamic来提供动态方法的性能

前段时间做了一个worklist的项目,有部分是利用xml配置DICOM的tag,然后根据xml把DICOM的Dataset转为实体类,或者把实体类转为Dataset。 当中主要应用了反射来调用Dat...
  • muzizongheng
  • muzizongheng
  • 2013年07月10日 15:44
  • 759

C#--反射使用 Go!--BindFlags的作用

BindFlags是什么? 我一般想知道这种问题,都会去Google一下,看一下MSDN上给的文档. (如果你想练习英语系列—英文版文档=>点击这里过去)(中文最方便系列–中文版文档...
  • qq_32452623
  • qq_32452623
  • 2016年12月02日 23:08
  • 2013
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c# Type.InvokeMember用法
举报原因:
原因补充:

(最多只允许输入30个字)