Type InvokeMember()用法简介
- 举例:
- Type tDate = typeof(System.DateTime);
- Object result = tDate.InvokeMember("Now",
- BindingFlags.GetProperty, null, null, new Object[]);
- 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[];
- args[] = ;
- args[] = ;
- m.Invoke(new TestClass(),args);
- /*
- public void Swap(ref int a, ref int b) 交换 a b
- {
- int x = a;
- a = b;
- b = x;
- }
- */
Type InvokeMember()用法简介的更多相关文章
- c# Type.InvokeMember用法
函数原型: public object InvokeMember(string, BindingFlags, Binder, object, object[]);string:你所要调用的函数名Bin ...
- 【C#反射】Type的用法
Type属性的应用 Type type = typeof(MyClass); Console.Write("$类型名:{ type.Name}"); Console.Write(& ...
- Postman用法简介
转自:http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介 转载 2016年10月10日 09:04:10 10 ...
- [转帖]linux lsof 用法简介
linux lsof 用法简介 https://www.cnblogs.com/saneri/p/5333333.html 1.简介: lsof(list open files)是一个列出当前系统打开 ...
- C++ Json工具--Jsoncpp用法简介
文章目录 Json简介 用法简介 数据类型 C++代码示例 代码执行输出结果 JSON在线解析及格式化验证 - JSON.cn Json简介 JSON(JavaScript Object Notati ...
- IOS NSInvocation用法简介
IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...
- JodaTime用法简介
JodaTime用法简介 Java的Date和Calendar用起来简直就是灾难,跟C#的DateTime差距太明显了,幸好有JodaTime 本文简单罗列JodaTime的用法 package co ...
- Activator.CreateInstance 方法 (Type) 的用法
转自:http://www.cnblogs.com/lmfeng/archive/2012/01/30/2331666.html Activator.CreateInstance 方法 (Type) ...
- Apache自带压力测试工具ab用法简介
ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...
随机推荐
- 基于REST架构的Web Service设计
来自: http://www.williamlong.info/archives/1728.html 先前我曾经介绍过利用Apache Axis实现基于SOAP的Web Service实现技术和相关代 ...
- TCPCopy 应用
TCPCopy 使用方法 TCPCopy是一种请求复制(所有基于tcp的packets)工具,可以把在线请求导入到测试系统中去.目前此工具已经广泛应用于国内各大互联网公司. TCPCopy七大功能1) ...
- 修改php执行用户,并使其拥有root权限
useradd apachephp vi /etc/httpd/conf/httpd.conf 将组和用户修改成apachephp,重启apache,然后用lsof -i:80查看apache的执行用 ...
- memcache 缓存的批量删除方案(转)
memcache 默认只支持使用delete(key)和 flush_all,这两种方法都太极端了,不能满足用户的特定需求,如:批量删除‘aaaaaaaa_’开头的所有缓存,这个时候该怎么办? 1 g ...
- 操作sqlserver数据库常用的三个方法
1. ADO.NET -> 连接字符串,常用的两种方式: server=计算机名或ip\实例名;database=数据库名;uid=sa;pwd=密码; server=计算机名或ip\实例名;d ...
- 使用XtraGrid自定义列计算1 z
Devexpress控件集提供的DataGrid控件,在功能和界面样式上都完爆WinForm的DataGridView控件,以前需要在 DataGridView控件上进行某列的统计,需要在GridVi ...
- Cocos2d-x 3.0修改Android平台帧率fps - 解决游戏运行手机发热发烫问题
使用Cocos2d-x 3.0开发游戏之后,发现游戏在android手机上发热非常严重,在魅族2上,几乎担心手机会爆炸了~~~采取的一个措施就是降低帧率,因为游戏对于帧率要求不是非常高. 做过coco ...
- 纹理缓存(Texture Cache)
纹理缓存是将纹理缓存起来方便之后的绘制工作.每一个缓存的图像的大小,颜色和区域范围都是可以被修改的.这些信息都是存储在内存中的,不用在每一次绘制的时候都发送给GPU. CCTextureCache C ...
- C#父类子类对象关系
案例: 主要有Vehicle.cs Airplane.cs Car.cs 3个类. Car和Airplane都继承与Vehicle类.Vehicle中Drive为虚方法,可在子类中重写,父类引 ...
- Rotate bitmap by real angle
tl;dr; Use GDI+ SetWorldTransform With WinAPI's SetWorldTransform you can transform the space of dev ...