C#反射技术的简单操作(读取和设置类的属性)

public class A
{
  public int Property1 { get; set; }
}
static void Main(){
  A aa = new A();
  Type type = aa.GetType();//获取类型
  System.Reflection.PropertyInfo propertyInfo = type.GetProperty("Property1");
  propertyInfo.SetValue(aa, 5, null);//给对应属性赋值
  int value = (int)propertyInfo.GetValue(aa, null);
  Console.WriteLine(value );
}

少量属性的自动化操作手动添加几下当然是没有问题的,但是属性数量较多的时候敲起这些繁锁的代码可以困了,再说对扩展和维护性造成很多的不便,这时,就需要使用反射来实现了。

要想对一个类型实例的属性或字段进行动态赋值或取值,首先得得到这个实例或类型的Type,微软已经为我们提供了足够多的方法。

首先建立一个测试的类

public class MyClass
{
  public int one { set; get; }
  public int two { set; get; }
  public int five { set; get; }
  public int three { set; get; }
  public int four { set; get; }
} 

然后编写反射该类的代码

MyClass obj = new MyClass();
Type t = typeof(MyClass);
//循环赋值
int i = 0;
foreach (var item in t.GetProperties())
{
  item.SetValue(obj, i, null);
  i += 1;
}
//单独赋值
t.GetProperty("five").SetValue(obj, 11111111, null);
//循环获取
StringBuilder sb = new StringBuilder();
foreach (var item in t.GetProperties())
{
  sb.Append("类型:" + item.PropertyType.FullName + " 属性名:" + item.Name + " 值:" + item.GetValue(obj, null) + "<br />");
}
//单独取值
int five = Convert.ToInt32(t.GetProperty("five").GetValue(obj, null));
sb.Append("单独取five的值:" + five);
string result = sb.ToString();
Response.Write(result); 

测试显示结果: 
类型:System.Int32 属性名:one 值:0 
类型:System.Int32 属性名:two 值:1 
类型:System.Int32 属性名:five 值:11111111 
类型:System.Int32 属性名:three 值:3 
类型:System.Int32 属性名:four 值:4 
单独取five的值:11111111

了解了类的属性反射使用后,那么方法也是可以这样做的,即t.GetProperties()改为t.GetMethods(),操作方法同上。

注:以上代码中如不能直接使用请添加using System.Text;的引用。

转载:

天使半只翼  C#反射技术的简单操作(读取和设置类的属性)

时间: 2024-10-24 01:44:28

C#反射技术的简单操作(读取和设置类的属性)的相关文章

C#反射技术的简单操作(读取和设置类的属性、属性值)

public class A { public int Property1 { get; set; } } static void Main(){ A aa = new A(); Type type = aa.GetType();//获取类型 System.Reflection.PropertyInfo propertyInfo = type.GetProperty("Property1"); propertyInfo.SetValue(aa, 5, null);//给对应属性赋值 i

C#反射读取和设置类的属性

C#反射技术的简单操作(读取和设置类的属性) http://www.cnblogs.com/william-lin/archive/2013/06/05/3118233.html 泛型方法通过反射创建类的实例 /// <summary> /// 获取web服务实例 /// </summary> /// <typeparam name="T">服务代理类</typeparam> /// <returns></returns

使用反射和泛型,动态读取XML创建类实例并赋值

[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. 前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能.网上的例子倒也不少,但总是觉得缺点什么.比如读取xml文件之后该如何处理?看到的文章基本上都是手动创建一个目标类的实例,然后手动从读取的XML文件的内容中给刚才创建的目标类实例相关字段赋值.缺点什么呢?对嘞,感觉上

自己动手之使用反射和泛型,动态读取XML创建类实例并赋值

前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能.网上的例子倒也不少,但总是觉得缺点什么.比如读取xml文件之后该如何处理?看到的文章基本上都是手动创建一个目标类的实例,然后手动从读取的XML文件的内容中给刚才创建的目标类实例相关字段赋值.缺点什么呢?对嘞,感觉上不够简单和智能. 正所谓驱动科技发展的原因就是懒,为了使我们的小工具能够傻瓜到只需要

七技术之Git服务器gitolite的搭建及简单操作

最近人比较懒了,为了让自己改变一下,所以决定抽空去学习一些新的技术,对于这些新的技术,目前的要求不是很高,只是要求入门就可以了. 由于本人只是花三四天整出来的东西,所以不洗勿喷,另外难免会有错误,如有还请指出. 环境: Ubuntu server 14.04.1 .Git 1.9.1 gitolite3 对于Git的介绍这里就不介绍,有兴趣的大家可以自己去网上搜搜. 下面介绍怎么安装Git服务器gitolite,以及怎么建立仓库.添加用户等操作,本篇文章不会介绍太多的Git本身的命令,因为我自己

7. 反射技术:其实就是动态加载一个指定的类

反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员.简单说:反射技术可以对一个类进行解剖. 反射的好处:大大的增强了程序的扩展性. 反射的基本步骤: 1.获得Class对象,就是获取到指定的名称的字节码文件对象. 2.实例化对象,获得类的属性.方法或构造函数. 3.访问属性.调用方法.调用构造函数创建对象. 获取这个Class对象,有三种方式: 1:通过每个对象都具备的方法getClass来获取.

反射技术

反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员.简单说:反射技术可以对一个类进行解剖. 反射的好处:大大的增强了程序的扩展性. 反射的基本步骤: 1.获得Class对象,就是获取到指定的名称的字节码文件对象. 2.实例化对象,获得类的属性.方法或构造函数. 3.访问属性.调用方法.调用构造函数创建对象. 获取这个Class对象,有三种方式: 1:通过每个对象都具备的方法getClass来获取.

c#中反射技术在Unity中的运用

反射技术给类赋值的好处就是可以简化代码,封装的好处就显而易见了.最直接的用途就是用在在显示配置文件的时候,个人习惯性做法是做一个VO来存储需要的数据,其代码如下: internal class BaseItemVO { public string name; public string lockA; } 运用反射来获取类中的字段: public static void setValue(Object tar, String name, Object value) { FieldInfo fInf

学习spring之前必学之反射技术(一)

引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩". 以下几项Java知识和Spring框架息息相关,不可不学    Java语言允许通过程序化的方式间接对Class进行操作,Class文件由类装载器装载后,在JVM中将形成一份 描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数.属性和方法等.Java 允许用户借由这个Class相关的元信息对象间接调用Class对象的功能,这就为使用程序化方