反射的一些用法(WP8.1下)
我初步的理解:反射就是动态调用(dll)类。
比如某个dll有一个类,通过反射就可以知道它里面属性、方法,就可以实现调用。
确实,dll可以直接引用,但是如果遇到这种情况:
添加、删除功能同属一个Dll,要在源程序代码不变的情况下,增加新功能,就要动态加载程序集。
1.反射获取类型
a.对于普通的类:
Type t = Type.GetType("TestReflect.Class1"); //typeName = 命名空间+类名 //或者根据类是实例来获取: Class1 obj = new Class1(); Type t = typeof(Class1);
b.Dll等装配件:
Assembly assembly = Assembly.Load(new AssemblyName() { Name = "PhoneClassLibrary1" }); //加载程序集 Name为引用的Dll的标识(属性中查看) //Load() 只需程序集名称; LoadFrom() 需要完整路径名 Type t = assembly.GetType("PhoneClassLibrary1.TestClass"); //命名空间+类名
2.创建实例
object[] args = new object[] {"arg1", "arg2"}; //带两个参数(构造函数的重载) ; new object[] {} 为不带参数 调用默认构造函数 Class1 obj = (Class1)Activator.CreateInstance(t,args);
3.获取方法
a.获取单个方法(注意:此方法只能访问Public型)
MethodInfo method = t.GetRuntimeMethod("MethodName", new Type[] { typeof(string) }); //MethodName:方法名 后者为方法的参数
//MethodInfo method = t.GetRuntimeMethod("MethodName",new Type[]{}); //此为无参方法的获取
if (method != null)
method.Invoke(obj, new object[] { "hello" });
//method.Invoke(obj, null); //无参数方法的调用
b.获取访问修饰符为private等方法
//若要访问 Private 必须获取方法集合
var list = t.GetRuntimeMethods();
foreach (var item in list)
{
if (item.IsPrivate) //判断是否为Private
{
item.Invoke(obj, new object[] { }); //或者item.Invoke(obj, null);
//为静态方法时,obj可为null
}
else if (item.Name.Equals("OtherMethod"))
{
var back = item.Invoke(obj, new object[] { "传入的值" });
} }
4.当然,除了获取到方法之外,还能够获取字段(GetRuntimeField)
属性(GetRuntimeProperty)、事件(GetRuntimeEvent)等。这里就不详述了。
反射的一些用法(WP8.1下)的更多相关文章
- Java反射的常见用法
反射的常见用法有三类,第一类是“查看”,比如输入某个类的属性方法等信息,第二类是“装载“,比如装载指定的类到内存里,第三类是“调用”,比如通过传入参数,调用指定的方法. 1 查看属性的修饰符.类型和名 ...
- HtmlAgilityPack解析器在WP8.1下报错,不仅如此,社交化分享也报错。
以前WP7下是用的HtmlAgilityPack和 XPath来解析网页,很好用. 但是在Wp8.1下,这个里面却缺少了一个很重要的方法. HtmlDocument doc = new HtmlDoc ...
- C# 反射的简单用法
新建两个项目:类库(Model)和控制台应用程序(ReflectTest). 在[Model]中添加一个类[User]: namespace Model { public class User { p ...
- java 反射与常用用法
java通常是先有类再有对象,有对象我就可以调用方法或者属性. 反射其实是通过Class对象来调用类里面的方法.通过反射可以调用私有方法和私有属性.大部分框架都是运用反射原理. 如何获得Class对象 ...
- Java反射之Field用法
在Java反射中Field用于获取某个类的属性或该属性的属性值 一:如何通过Field反射获取类的属性 Field提供如下几种方法: :1:Class.getDeclaredField(String ...
- 八.OC基础加强--1.autorelease的用法 2.ARC下内存管理 3.分类(category)4.block的学习
1.autorelease的用法 1.自动释放池及autorelease介绍 (1)在iOS程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的. (2)当一个对象调用auto ...
- 【.Net 学习系列】-- 反射的简单用法
新建两个项目:类库(Model)和控制台应用程序(ReflectTest). 在[Model]中添加一个类[User]: namespace Model { public class User { p ...
- WP8.1下 Cortana语音命令 VCD文件 设计
Windows Phone8.1下的Cortana,可以通过语音的方式,打开.设置应用,进行页面跳转.执行任务. 我们先要创建VCD(VoiceCommand.xml)文件 <?xml vers ...
- SSH+DWZ、JQuery-UI ,swfobject.embedSWF属性与用法,IE下日期控件被flash控件挡住
---恢复内容开始--- 最近在做SSH+DWZ(JQuery-UI)项目,在用到图表问题的时候,出现在IE下面,日期控件被flash被挡住而不能选取日期情况,经在网络搜查,现在解决办法如下: 1.首 ...
随机推荐
- 浅谈Oracle权限体系
对于数据库来讲,安全性的重要程度不言而喻,今天我们就来聊一聊Oracle的权限体系. 1.账户管理 在此之前,先解释下一个容易混淆的概念:模式.所谓模式,指的是用户账户所拥有的一组对象(比如表,索引, ...
- px,em,rem
px:像素是相对于显示器屏幕分辨率而言的相对长度单位.pc端使用px倒也无所谓,可是在移动端,因为手机分辨率种类颇多,不可能一个个去适配,这时px就显得非常无力,所以就要考虑em和rem. em:继承 ...
- python3使用pyqt5制作一个超简单浏览器
我们使用的是QWebview模块,这里也主要是展示下QWebview的用法. 之前在网上找了半天的解析网页的内容,都不是很清楚. 这是核心代码: webview = Qwebview() webvie ...
- Spring MVC 使用HiddenHttpMethodFilter配置Rest风格的URL
/** Rest 风格的 URL. 以 CRUD 为例: 新增: /order POST 修改: /order/1 PUT update?id=1 获取:/order/1 GET get?id=1 删 ...
- JS九大内置对象
- 第13章 Java常用类
1.自动装箱和自动拆箱 自动装箱:基本类型就自动的封装到与它相同类型的包装中:如: 创建一个对象时:Integer i = 100;本质上是编译器编译时为我们添加了:Integer i = new I ...
- 有return的情况下try catch finally的执行顺序(转)
结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...
- Linux Linux程序练习十八
题目:编写一个TCP服务器和客户端,基于TCP的并发远程shell 要求实现: )对于所有收到的客户端消息,作为命令行进行执行, 并且将命令行的输出结果返回给客户端 )要求使用并发结构 )实现关键代码 ...
- Highcharts——让你的网页上图表画的飞起
Highcharts是一款纯javascript编写的图表库,能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图.柱状图.饼图.散点图等多达 ...
- rpc框架之 thrift连接池实现
接前一篇rpc框架之HA/负载均衡构架设计 继续,写了一个简单的thrift 连接池: 先做点准备工作: package yjmyzz; public class ServerInfo { publi ...