我初步的理解:反射就是动态调用(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. Comparison of SQL Server Compact, SQLite, SQL Server Express and LocalDB

    Information about LocalDB comes from here and SQL Server 2014 Books Online. LocalDB is the full SQL ...

  2. Java反射特性--获取其他类实例并调用其方法

    1. 代码结构 .├── com│   └── test│   └── MyTest.java└── MainCall.java 2. 代码内容 MyTest.java: package com.te ...

  3. NYOJ 451

    光棍节的快乐 描述 光棍们,今天是光棍节.聪明的NS想到了一个活动来丰富这个光棍节. 规则如下: 每个光棍在一个纸条上写一个自己心仪女生的名字,然后把这些纸条装进一个盒子里,这些光 棍依次抽取一张纸条 ...

  4. NYOJ 187

    快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N&l ...

  5. python脚步管理工具supervisor=3.3.0的安装、使用。基于linux系统。

    一.安装相关包 sudo apt-get install python-pip       #python的安装包的工具 sudo apt-get install python-dev       # ...

  6. 在oracle中,如何当前系统时间往前推7天

    ' day from dual 另附: 当前时间减去7分钟的时间 ' MINUTE from dual 当前时间减去7小时的时间 ' hour from dual 当前时间减去7天的时间 ' day ...

  7. java-生成印章swing

    案例1 package com; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import j ...

  8. python 中文乱码问题

    解决方案: 1.py文件另存为ANSI文件 2.py文件头部加注释 # -*- coding:utf-8 -*-

  9. PHP读取CSV文件把数据插入到数据库,本地没有问题,阿里云测试服务器不行

    原因是 本地windows和服务器linux编码不同,在代码中不要加编码转换的内容,而是把csv文件另存为utf-8文件上传就可以了,windows和Linux都就可以了. html代码: PHP端代 ...

  10. edit界面初始化加默认值

    功能名称:modelCreateAction 切入类型:after 事件名称:com.kingdee.bos.eventbus.event.model.ModelCreateEvent package ...