首页 > 代码库 > 反射的一些用法(WP8.1下)
反射的一些用法(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下)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。