我初步的理解:反射就是动态调用(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下)的更多相关文章

  1. Java反射的常见用法

    反射的常见用法有三类,第一类是“查看”,比如输入某个类的属性方法等信息,第二类是“装载“,比如装载指定的类到内存里,第三类是“调用”,比如通过传入参数,调用指定的方法. 1 查看属性的修饰符.类型和名 ...

  2. HtmlAgilityPack解析器在WP8.1下报错,不仅如此,社交化分享也报错。

    以前WP7下是用的HtmlAgilityPack和 XPath来解析网页,很好用. 但是在Wp8.1下,这个里面却缺少了一个很重要的方法. HtmlDocument doc = new HtmlDoc ...

  3. C# 反射的简单用法

    新建两个项目:类库(Model)和控制台应用程序(ReflectTest). 在[Model]中添加一个类[User]: namespace Model { public class User { p ...

  4. java 反射与常用用法

    java通常是先有类再有对象,有对象我就可以调用方法或者属性. 反射其实是通过Class对象来调用类里面的方法.通过反射可以调用私有方法和私有属性.大部分框架都是运用反射原理. 如何获得Class对象 ...

  5. Java反射之Field用法

    在Java反射中Field用于获取某个类的属性或该属性的属性值 一:如何通过Field反射获取类的属性 Field提供如下几种方法: :1:Class.getDeclaredField(String ...

  6. 八.OC基础加强--1.autorelease的用法 2.ARC下内存管理 3.分类(category)4.block的学习

    1.autorelease的用法   1.自动释放池及autorelease介绍 (1)在iOS程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的. (2)当一个对象调用auto ...

  7. 【.Net 学习系列】-- 反射的简单用法

    新建两个项目:类库(Model)和控制台应用程序(ReflectTest). 在[Model]中添加一个类[User]: namespace Model { public class User { p ...

  8. WP8.1下 Cortana语音命令 VCD文件 设计

    Windows Phone8.1下的Cortana,可以通过语音的方式,打开.设置应用,进行页面跳转.执行任务. 我们先要创建VCD(VoiceCommand.xml)文件 <?xml vers ...

  9. SSH+DWZ、JQuery-UI ,swfobject.embedSWF属性与用法,IE下日期控件被flash控件挡住

    ---恢复内容开始--- 最近在做SSH+DWZ(JQuery-UI)项目,在用到图表问题的时候,出现在IE下面,日期控件被flash被挡住而不能选取日期情况,经在网络搜查,现在解决办法如下: 1.首 ...

随机推荐

  1. Struts与Struts2的区别

    Struts与Struts2的区别 首先看一张Struts2的发展路线图:       从Struts2的发展过程来看,Struts2继承了Struts与Webwork的特性,形成了新的框架.但是它的 ...

  2. 《In Search of an Understandable Consensus Algorithm》翻译

    Abstract Raft是一种用于管理replicated log的consensus algorithm.它能和Paxos产生同样的结果,有着和Paxos同样的性能,但是结构却不同于Paxos:它 ...

  3. Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  4. Linux下基于vsftpd搭建ftp服务器

    1.先用检查是否已经安装rpm -qa| grep vsftpd2.然后再进行在线安装vsftpd这个服务yum install vsftpd -y3.修改vi /etc/vsftpd/vsftpd. ...

  5. Revolving Digits[EXKMP]

    Revolving Digits Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. java多线程系类:JUC线程池:04之线程池原理(三)(转)

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介绍线程池的生命周期.在"Java多线程系列--"基础篇& ...

  7. J2EE,J2SE,J2ME,JDK,SDK,JRE,JVM区别

    转自:http://www.metsky.com/archives/547.html 一.J2EE.J2SE.J2ME区别 J2EE——全称Java 2 Enterprise Edition,是Jav ...

  8. 百度数据可视化图表套件echart实战

    最近我一直在做数据可视化的前端工作,我用的最多的绘图工具是d3.d3有点像photoshop,功能很强大,例子也很多,但是学习成本也不低,做项目是需要较大人力投入的.3月底由在亚马逊工作的同学介绍下使 ...

  9. 十分钟轻松让你认识Entity Framework 7

    EF7不是在EF6上更新,而是完全重写了.它完全支持.NET Core runtime,也就是说以后你可以在Mac或者是Linux机器上使用EF了. https://github.com/nichol ...

  10. Js 遍历json对象所有key及根据动态key获取值

    var obj = {}; for(var k in obj) { //遍历对象,k即为key,obj[k]为当前k对应的值 console.log(obj[k]); } 文章来自:https://z ...