`
iwebcode
  • 浏览: 2004288 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

C#反射技术的简单操作

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

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

首先建立一个测试的类

  1. publicclassMyClass
  2. {
  3. publicintone{set;get;}
  4. publicinttwo{set;get;}
  5. publicintfive{set;get;}
  6. publicintthree{set;get;}
  7. publicintfour{set;get;}
  8. }
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; } 
} 

然后编写反射该类的代码

  1. MyClassobj=newMyClass();
  2. Typet=typeof(MyClass);
  3. //循环赋值
  4. inti=0;
  5. foreach(varitemint.GetProperties())
  6. {
  7. item.SetValue(obj,i,null);
  8. i+=1;
  9. }
  10. //单独赋值
  11. t.GetProperty("five").SetValue(obj,11111111,null);
  12. //循环获取
  13. StringBuildersb=newStringBuilder();
  14. foreach(varitemint.GetProperties())
  15. {
  16. sb.Append("类型:"+item.PropertyType.FullName+"属性名:"+item.Name+"值:"+item.GetValue(obj,null)+"<br/>");
  17. }
  18. //单独取值
  19. intfive=Convert.ToInt32(t.GetProperty("five").GetValue(obj,null));
  20. sb.Append("单独取five的值:"+five);
  21. stringresult=sb.ToString();
  22. Response.Write(result);
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#反射技术的简单操作(读取和设置类的属性)

    要想对一个类型实例的属性或字段进行动态赋值或取值,首先得得到这个实例或类型的Type,微软已经为我们提供了足够多的方法。... } } 然后编写反射该类的代码 代码如下: MyClass obj = new MyClass()

    轻松学C#(图解版)

    第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、预处理器、程序集、运行时类型标识、反射、特性、泛型、LINQ和数据库开发等。 =======================================...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    C#5.0本质论第四版,高清扫描的,对C#5.0技术讲的比较详细,第1章 C#概述 1 1.1 Hello,World 1 1.2 C#语法基础 3 1.2.1 C#关键字 3 1.2.2 标识符 4 1.2.3 类型定义 5 1.2.4 Main 6 1.2.5...

    CLR.via.C#.(中文第3版)(自制详细书签)

    · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态扩展能力的应用程序 本书作者作者Jeffrey Richter,.NET和Windows编程领域当之无愧的大师和权威,以著述清楚明了,行文流水,言简意赅...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态扩展能力的应用程序 本书作者作者Jeffrey Richter,.NET和Windows编程领域当之无愧的大师和权威,以著述清楚明了,行文流水,言简意赅...

    C#源码大集合 03(共3卷)

    C#源码大集合 03(共3卷) &lt;br&gt;之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷) &lt;br&gt; ├─C#源码第一部分 │ ├─第1章 控件操作 │ │ ├─实例1 如何...

    C#源码大集合 02(共3卷)

    C#源码大集合 02(共3卷) 之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷) ├─C#源码第一部分 │ ├─第1章 控件操作 │ │ ├─实例1 如何使用错误提醒控件 │ │ ...

    C#源码大集合 01(共3卷)

    C#源码大集合 01(共3卷) &lt;br&gt;之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷) &lt;br&gt; ├─C#源码第一部分 │ ├─第1章 控件操作 │ │ ├─实例1 如何...

    C#一键生成实体类-带源码.zip

    项目里面使用到了,泛型,反射,简单工厂,三层,文件写入,数据库查询操作等技术。适合初级者学习和使用。如果需要使用生成实体模型,只需要更改配置文件里面数据库连接就可以了。

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.7

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的代码基于OO、ADO.NET、分层架构、ORM,改进的抽象工厂设计模式及反射机制...

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.8

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的代码基于OO、ADO.NET、分层架构、ORM,改进的抽象工厂设计模式及反射机制...

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.7 201705更新

    VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为VB/C#.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的代码基于OO、ADO.NET、分层架构、ORM,改进的抽象工厂设计模式及反射机制...

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态扩展能力的应用程序 本书作者作者Jeffrey Richter,.NET和Windows编程领域当之无愧的大师和权威,以著述清楚明了,行文流水,言简意赅...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态扩展能力的应用程序 本书作者作者Jeffrey Richter,.NET和Windows编程领域当之无愧的大师和权威,以著述清楚明了,行文流水,言简意赅...

Global site tag (gtag.js) - Google Analytics