C#反射机制
来源:互联网 发布:51talk怎么样 知乎 编辑:程序博客网 时间:2024/05/18 04:12
c#反射机制
反射是.NET中的重要机制,通过反射就可以在运行时获得程序或程序集中的每一个类型(包括 类,结构,委托,接口,和枚举)的成员信息。 还可以直接创建对象
1. Type 类 获取某个类型的详细信息的类,
- typeof Type t1=typeof(string);
- s.GetType() string s=”hello”; s.GetType();
- Type.GetType()参数是某个类型的完全限定名 Type t3=Type.GetType(“System.String”)
2. MemberInfo[]mi=t1.GetMembers();可以很明显的从GetMembers()看出,获取的是类中的所有成员,所以返回值类型一定是可以存储多个数据的类型。所以就是一个MemberIbfo类型的数组。数组中的成员包含,MemberType Name 等多个属性
MemberInfo[] mis = t1.GetMembers(); foreach (var item in mis) { Console.WriteLine("Name{0}",item.Name); }
- 获取构造函数
ConstructorInfo[] cis = t.GetConstructors(); foreach (var item in cis) 获取的是所有的构造函数 { Console.WriteLine(item); // 获取构造函数的参数 foreach (var it in item.GetParameters()) { //输出构造函数的参数的类型 Console.WriteLine(it.ParameterType); } }
- 用Type 类型的数组存储参数列表 和普通的数组一样,可以用多种方式初始化
Type []ps = new Type [5]; ps[0] = typeof(string); ps[1] = typeof(int); ps[2] = typeof(double); ps[3] = typeof(double); ps[4] = typeof(double);ConstructorInfo ci = t.GetConstructor(ps);//根据ps表示的参数列表获取构造函数ParameterInfo[] pi = ci.GetParameters();获取构造函数中的参数信息 foreach (var item in pi) { Console.WriteLine(item.ParameterType+" "+item.Name); }//在写的时候要脑子里清楚是获取的什么东西,多个就用数组,单个就直接接收
- 定义参数列表 调用构造函数进行初始化
object[] parmeters = { "zhangsan", 20, 78, 88, 98 };// NewClass nc = (NewClass)ci.Invoke(parmeters); //通过activator的CreateInstance 方法创建对象, //第一个参数是对象的类型,后边的参数是构造函数的参数 //根据构造函数参数自动选择对应的构造函数 不写参数的话默认调用无参的构造函数 object o = Activator.CreateInstance(t, "zhangsan", 20, 89, 98, 88); ((NewClass)o).print(); object o1 = Activator.CreateInstance(t); ((NewClass)o1).print(); }
- 创建对象
object o = Activator.CreateInstance(t);//创建实例 o 就是一个实例对象,
获取属性c#
PropertyInfo pi_name=t.GetProperty("Name");
PropertyInfo pi_age = t.GetProperty("Age");
设置属性的值
pi_name.SetValue(o, “ffffff”);//setValue
获取属性的值
Console.WriteLine(pi_age.GetValue(o)) 需要添加程序集
/*Assembly ass = Assembly.Load("library"); Type[] t = ass.GetTypes();//获取所有的类 //使用loadFrom或LoadFile时,不需要将程序集添加到工程中来 //可以直接通过文件的路径来加载程序集 //Loadfill不会添加程序集依赖的资源,只添加该程序及本身 //Loadfrom会添加程序集依赖的所有程序集
阅读全文
1 0
- 学习反射机制 c#
- C#反射机制
- C#反射机制
- C#的反射机制
- C#的反射机制
- c#中的反射机制
- 学习 c# 反射机制
- C# 反射机制
- C#反射机制
- C#反射机制
- C#反射机制(二)
- C#反射机制
- C#反射机制
- C#中的反射机制
- c#中的反射机制
- C# 反射机制
- C#反射机制总结
- c# 反射机制
- Java重载
- 修改mysql数据库字符集为UTF8的
- UVA 10785
- Java多线程--线程状态
- localstrage
- C#反射机制
- 【笔记】游戏制作技巧——1
- UVA 10152
- HDU2544最短路
- 【C#】委托和事件实例
- meta标签整理的一些用法
- python之json模块
- UVA 133
- 123