1、引入命名空间:System.Reflection;程序集:mscorlib(在mscorlib.dll中)

2、示例代码(主要是getType()、setValue()、getValue()方法):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;namespace 反射
{class Program{/// <summary>/// 反射描述了程序集、模块、类型的对象(Type类型)。可以使用反射动态创建类型的实例,将实例绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性/// 如果代码中使用了特性,可以利用反射来访问它们/// </summary>static void Main(string[] args){//1、GetType()的解释及示例//// 摘要://     获取当前实例的 System.Type。//// 返回结果://     System.Type 实例,表示当前实例的确切运行时类型。//下面使用静态方法GetType(从Object基类派生的所有类型都继承该方法)获取其类型的简单反射示例Student stu1 = new Student() { id = 1, name = "张三", length = 175, datetime = DateTime.Now };//Student stu2 = new Student() { id = 2, name = "李四", length = 180, datetime = DateTime.Now };//name = "李四", datetime = DateTime.Nowvar list = new List<Student>();list.Add(stu1);list.Add(stu2);Type stuType = stu1.GetType();Type listType = list.GetType();Console.WriteLine("---------------getType()输出类型----------------");Console.WriteLine(stuType);//输出Student的类型Console.WriteLine(stu1.id.GetType());//输出Student的id的类型Console.WriteLine(stu1.name.GetType());//输出Student的name的类型Console.WriteLine(stu1.datetime.GetType());//输出Student的datetime的类型Console.WriteLine(listType);//输出List的类型//2、GetProperties()的解释及示例//// 摘要://     返回当前 System.Type 的所有公共属性。//// 返回结果://     表示当前 System.Type 的所有公共属性的 System.Reflection.PropertyInfo 对象数组。- 或 -如果当前 System.Type//     没有公共属性,则为 System.Reflection.PropertyInfo 类型的空数组。PropertyInfo[] stuPropertyS = stuType.GetProperties();PropertyInfo[] listPropertyS = listType.GetProperties();//Console.WriteLine(stuPropertyS.Count());//Console.WriteLine(stuPropertyS.Length);//3、SetValue()的解释及示例//// 摘要://     用索引属性的可选索引值设置该属性的值。//// 参数://   obj://     将设置其属性值的对象。////   value://     此属性的新值。////   index://     索引化属性的可选索引值。对于非索引化属性,此值应为 null。//// 异常://   System.ArgumentException://     index 数组不包含所需类型的参数。- 或 -未找到该属性的 set 访问器。////   System.Reflection.TargetException://     该对象与目标类型不匹配,或者某属性是实例属性但 obj 为 null。////   System.Reflection.TargetParameterCountException://     index 中参数的数目与已编制索引的属性所采用的参数的数目不相符。////   System.MethodAccessException://     尝试非法访问某类中私有或受保护的方法。////   System.Reflection.TargetInvocationException://     设置属性值时出错。例如,为索引属性指定的索引值超出范围。System.Exception.InnerException 属性指示错误的原因。Console.WriteLine("---------------setValue()给某属性赋值----------------");PropertyInfo stuPro = stuPropertyS.FirstOrDefault(x => x.Name == "name");//这里是找name的属性名stuPro.SetValue(stu1, "王五", null);Console.WriteLine(stu1.name);//4、GetType()方法的解释和示例//// 摘要://     用索引化属性的可选索引值返回指定对象的该属性值。//// 参数://   obj://     将返回其属性值的对象。////   index://     索引化属性的可选索引值。 对于非索引化属性,该值应为 null。//// 返回结果://     指定对象的属性值。//// 异常://   System.ArgumentException://     index 数组不包含所需类型的参数。 - 或 - 未找到该属性的 get 访问器。////   System.Reflection.TargetException://     该对象与目标类型不匹配,或者某属性是实例属性但 obj 为 null。////   System.Reflection.TargetParameterCountException://     index 中参数的数目与已编制索引的属性所采用的参数的数目不相符。////   System.MethodAccessException://     尝试非法访问某类中私有或受保护的方法。////   System.Reflection.TargetInvocationException://     检索属性值时出错。 例如,为索引属性指定的索引值超出范围。 System.Exception.InnerException 属性指示错误的原因。Console.WriteLine("---------------getValue()遍历属性值----------------");foreach (var v in stuPropertyS)//遍历属性{Console.WriteLine(v.GetValue(stu1, null));}Console.ReadLine();}}public class Student{public int id { get; set; }public string name { get; set; }public decimal length { get; set; }public DateTime datetime { get; set; }}
}

3、运行结果:

4、下面是PropertyInfo 类型主要公开的成员,可供参考(摘自:http://msdn.microsoft.com/zh-cn/library/system.reflection.propertyinfo(v=vs.110).aspx)




转自https://www.cnblogs.com/cocoon/p/4997030.html

C#之反射(PropertyInfo类)相关推荐

  1. 通过反射获取类的所有属性和方法

    通过反射获取类的所有属性和方法  1    private void button1_Click(object sender, EventArgs e)  2        {  3          ...

  2. C# 反射 实例化类

    今天的内容是通过反射获取类的实体,并且进行赋值,调用方法等. 业务场景:不同的部门要录入不同的数据(①页面字段不同②数据库表不同),所以就为这些部门指定了模板(即xml文件),当部门人员要录入时,只需 ...

  3. 反射PropertyInfo.GetValue()取值抛出需使用DBNull的异常

    帮朋友改代码,在一个DataTable转换.csv的公共类中碰到这个问题. 借鉴这里的问答:这里的问答:反射PropertyInfo.GetValue(对象)抛出DBNull异常 - VoidCC 朋 ...

  4. 反射工具类 java_Java反射工具类

    importjava.lang.reflect.Field;importjava.lang.reflect.Method;/*** Java反射工具类 * 提供以下几个功能: * 1. 取最简类名 * ...

  5. 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  6. 反射工具类ReflectionUtils

    为什么80%的码农都做不了架构师?>>>    package net.pm.common.toolkit;import java.lang.reflect.Field; impor ...

  7. 反射工具类,如斯优雅

    Foreword 反射的作用我在这就不多说了,每次用到反射都是那么一坨代码丢进去,总是让人觉得很不优雅,如今有了我这个反射工具类,那么大家就可以一句话优雅地来完成反射的工作,该工具类是站在 jOOR ...

  8. python 元类的call_python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法...

    python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法 一, 内置函数补充 1,isinstance(obj,cls)检查 ...

  9. 利用java反射调用类的的私有方法

    http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...

  10. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

最新文章

  1. 使用Objects判断对象是否为空,并返回对应信息
  2. 普通电阻触摸屏多点触摸低成本解决方 转载
  3. 互联网晚报 | 4月11日 星期一 | 苏州放宽住房限售;苹果确认开始在印度生产iPhone 13;民航局将上报民航专项检查方案...
  4. selenium java封装_selenium2.0的初步封装(java版本)
  5. 针对口令的暴力破解攻击方式
  6. Lauterbach trace32与 jlink
  7. 论文笔记:OverFeat
  8. 30岁后的测试工程师都去哪儿了?
  9. 关于Android中RSA数字签名的理解及使用
  10. 文本输入框input实现字母大小写转换
  11. 光纤熔接机怎么选?从哪里买价格低服务有保障?
  12. Kubernetes部署失败的10个最常见原因
  13. 不等距双杆模型_电磁感应之双杆模型ppt课件
  14. 简单的nodejs+socket.io给指定的人发送消息
  15. img取消无图片时的默认边框
  16. 最简单的视频编码器(一)---libx264
  17. java分词支持拼音_java 支持分词的高性能拼音转换工具,速度是 pinyin4j
  18. 计算机专业朋友圈文案,发朋友圈会收获一大波好评的句子,逼格超高(专业文案的收藏)...
  19. java 中的多种判空方式
  20. java zhs16gbk_JAVA-----乱码的处理 乱码的解决方法总结

热门文章

  1. igrimaceV8.0.0 IG 一键新机 陌陌 Uber优步打针 平安易贷 滴滴 一号专车 饿了么 ios8 V8 ZTN(插件安装方式)
  2. 苹果OTG取电协议芯片CY265
  3. 万字长文复习HTTP
  4. ViewStateMode與EnableViewState的差別(转)
  5. 基于STM32F103C8T6的超声波与舵机综合应用的垃圾桶项目
  6. jEdit打字区域背景颜色个性化设置
  7. TX2挂载SD卡,jtop
  8. 利用c51进行数模转换并在液晶屏上显示_基于C51单片机的智能计算器、矩阵键盘、lcd1602...
  9. URLScheme唤醒App
  10. book类 借书 java_模拟借书系统(Java入门第三季第一章练习)