博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 反射之属性操作
阅读量:4952 次
发布时间:2019-06-12

本文共 1910 字,大约阅读时间需要 6 分钟。

一、反射-类操作

//1.获取对象所有的属性名Student stu = new Student();//获取当前类名称Console.WriteLine(stu.GetType().Name);//命名空间 和名称Console.WriteLine(stu.GetType().FullName);//2.指定类型,动态创建对象Student stu2 = Activator.CreateInstance
();Console.WriteLine(stu2.ToJsonString());

二、反射属性操作之PropertyInfo

使用PropertyInfo操作属性,简单方便

//反射属性操作 方式二Student stu = new Student();Type t = stu.GetType();/*****操作所有属性*****///1.获取指定名称的属性PropertyInfo[] pro2 = t.GetProperties();foreach (PropertyInfo item in pro2){    //Name----属性名称    //PropertyType----字段类型 例如:System.Int32    Console.WriteLine(item.Name + "--->" + item.MemberType + "--->" + item.PropertyType);}//2.获取或设置属性的值foreach (PropertyInfo item in pro2){    object value = null;    if (item.Name == "ID")        value = 1;    else        value = "张三";    item.SetValue(stu, value);    //获取属性值    Console.WriteLine(item.GetValue(stu));}/**操作单个属性***/PropertyInfo id = t.GetProperty("ID");id.SetValue(stu,2);Console.WriteLine(id.GetValue(stu));

三、反射属性操作之MemberInfo

MemberInfo可以操作所有的类成员

Student stu = new Student();//反射属性操作 方式一Type t = stu.GetType();//GetMembers() 返回当前 System.Type 的所有公共成员//获取对象的所有公共属性名称和属性值MemberInfo[] members = t.GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);foreach (MemberInfo item in members){    if (item.MemberType != MemberTypes.Property)    {        Console.WriteLine("当前属性为:" + item.MemberType);        continue;    }    Console.WriteLine(item.Name); //属性名称    Console.WriteLine(item.MemberType);//属性类型                                        //获取属性的值    object value = null;    if (item.Name == "ID")        value = 1;    else value = "张三";    t.InvokeMember(item.Name, BindingFlags.SetProperty, null, stu, new object[] { value });    //设置属性的值    object result = t.InvokeMember(item.Name, BindingFlags.GetProperty, null, stu, null);    Console.WriteLine(result);}

 

更多参考:

转载于:https://www.cnblogs.com/tianma3798/p/6128010.html

你可能感兴趣的文章
Python&Selenium&Unittest&BeautifuReport 自动化测试并生成HTML自动化测试报告
查看>>
活现被翻转生命
查看>>
POJ 1228
查看>>
SwaggerUI+SpringMVC——构建RestFul API的可视化界面
查看>>
springmvc怎么在启动时自己执行一个线程
查看>>
流操作的规律
查看>>
Python基础学习15--异常的分类与处理
查看>>
javascript运算符的优先级
查看>>
React + Redux 入门(一):抛开 React 学 Redux
查看>>
13位时间戳和时间格式化转换,工具类
查看>>
vue router-link子级返回父级页面
查看>>
C# 通知机制 IObserver<T> 和 IObservable<T>
查看>>
Code of Conduct by jsFoundation
查看>>
div 只显示两行超出部分隐藏
查看>>
C#小练习ⅲ
查看>>
debounce、throttle、requestAnimationFrame
查看>>
linux下的C语言快速学习—进程和文件
查看>>
电源防反接保护电路
查看>>
stm32 堆和栈(stm32 Heap & Stack)
查看>>
SpringMVC从入门到精通之第三章
查看>>