C# 反射之属性操作
一、反射-类操作
//1.获取对象所有的属性名
Student stu = new Student();
//获取当前类名称
Console.WriteLine(stu.GetType().Name);
//命名空间 和名称
Console.WriteLine(stu.GetType().FullName);
//2.指定类型,动态创建对象
Student stu2 = Activator.CreateInstance<Student>();
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 = ;
else
value = "张三";
item.SetValue(stu, value);
//获取属性值
Console.WriteLine(item.GetValue(stu));
}
/**操作单个属性***/
PropertyInfo id = t.GetProperty("ID");
id.SetValue(stu,);
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 = ;
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);
}
更多参考:
http://blog.163.com/m13864039250_1/blog/static/213865248201372833416948/
http://blog.163.com/m13864039250_1/blog/static/213865248201372123134158/
C# 反射之属性操作的更多相关文章
- C# 反射获取属性值、名称、类型以及集合的属性值、类型名称
实体类 class Product { public string Id { get; set; } public string Name { get; set; } public List<P ...
- 如何利用反射简化Servlet操作
如何利用反射简化Servlet操作 一.反射的实现 新建类BaseServlet,继承HttpServlet(不需要在web.xml文件中配置) 1.在doPost()方法中处理请求乱码,并调用d ...
- 了解JavaScript 对象的属性操作
提起操作, 很多人都会想到我们学习过程中最经常做的操作, 就是对数据库进行增, 删, 改, 查, 既然提到这个, 那么对于对象的属性操作也不例外, 基本上可以说也是这几个操作. JS中对象的属性标签 ...
- 深入理解javascript对象系列第二篇——属性操作
× 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...
- jQuery-1.9.1源码分析系列(八) 属性操作
jQuery的属性操作主要包括 jQuery.fn.val jQuery.fn.attr jQuery.fn.removeAttr jQuery.fn.prop jQuery.fn.removePro ...
- jQuery属性操作
jQuery 的属性操作的核心部分其实就是对底层 getAttribute().setAttributes()等方法的一系列兼容性处理 ...if ( notxml ) { name = name.t ...
- 利用@property实现可控的属性操作
利用@property实现可控的属性操作 Python中没有访问控制符, 不像java之类的 public class Person{ private int x public int getAge( ...
- js学习笔记2---HTML属性操作
1.HTML属性操作:读.写 属性名 属性值 2.属性读操作:获取.找到 a) 语法:元素.属性名 如:document.getElementById(“btn”).value; b) 字符串的连 ...
- jQuery源代码学习之八——jQuery属性操作模块
一.jQuery属性模块整体介绍 jQuery的属性操作模块分四个部分:html属性操作,dom属性操作,类样式操作,和值操作. html属性操作(setAttribute/getAttribute) ...
随机推荐
- bootstrap easyUI 的选型
最近开始搭建新的项目后台,开始在Bootstrap 和 EasyUI两个框架上选型,个人还是倾向于Bootstrap,毕竟这个响应式效果是个趋势,并且可以自动兼容不同的屏幕分辨率和设备.
- 关于 RecastNavigation 寻路结果异常的问题。
由于我们的项目采用的寻路解决方案是:客户端使用 unity 原生的寻路系统,服务器采用 RecastNavigation 系统,而服务器的寻路数据来自于从 unity 导出的,所以理论上两边的寻路结果 ...
- Java ThreadLocal深度解析
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的.各 ...
- 394. Coins in a Line
最后更新 一刷. 用数学方法是看是不是3的倍数. 不用数学方法的话要动态规划. 当前玩家,dp[i]行不行取决于dp[i-1]和dp[i-2],代表下一个玩家能不能赢,另一个玩家能赢的话当前就不能赢: ...
- 04、生成 HTMLTestRunner 测试报告
1.HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展.它生成易于使用的 HTML 测试报告 1>下载HTMLTestRunner.py文件,地址为: h ...
- Unicode与 utf8的互相转换
<?php function unicode_encode($name) { $name = iconv('UTF-8', 'UCS-2', $name); $len = strlen($nam ...
- java数据结构-非线性结构之树
一.树状图 树状图是一种数据结构,它是由n(n>=1)个有限节点组成的具有层次关系的集合.因其结构看起来想个倒挂的树,即根朝上,叶子在下,故被称为"树". 特点: 1. 每个 ...
- mongodb基本操作及存储图片显示方案
先介绍下mongodb的基本操作及使用 第一部:开启安全性验证 如果需要给MongoDB数据库使用安全验证,则需要用--auth开启安全性检查,则只有数据库认证的用户才能执行读写操作,开户安全性检查, ...
- foreach -begin -process -end
gc d:\vm.txt|foreach -begin {write-host "It's beginning."} -process {$_ +"aa"} ...
- 在LAMP环境下搭建JSP动态网页
开发环境Linux的版本号Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x ...