反射的一些用法(WP8.1下)_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 反射的一些用法(WP8.1下)

反射的一些用法(WP8.1下)

 2015/1/5 11:27:41  汪小饭  程序员俱乐部  我要评论(0)
  • 摘要:我初步的理解:反射就是动态调用(dll)类。比如某个dll有一个类,通过反射就可以知道它里面属性、方法,就可以实现调用。确实,dll可以直接引用,但是如果遇到这种情况:添加、删除功能同属一个Dll,要在源程序代码不变的情况下,增加新功能,就要动态加载程序集。1.反射获取类型a.对于普通的类:Typet=Type.GetType("TestReflect.Class1");//typeName=命名空间+类名//或者根据类是实例来获取:Class1obj=newClass1()
  • 标签:用法 反射

  

我初步的理解:反射就是动态调用(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)等。这里就不详述了。

发表评论
用户名: 匿名