本节先介绍system.Type类,通过这个类可以访问关于任何数据类型的信息。

1. system.Type类
以前把Type看作一个类,但它实际上是一个抽象的基类。只要实例化了一个Type对象,
实际上就实例化了Typc的一个派生类。尽管一般情况下派生类只提供各种Type方法和属性的不同
重载,但是这些方法和属性返回对应数据类型的正确数据,Type有与每种数据类型对应的派生类。
  通常,获取指向任何给定类型的Type引用有3种常用方式:
(1) 使用C#的typeof运算符

Typef = typeof(double)

(2) 使用GetType()方法,所有的类都会从system.object继承这个方法。

double d = ;
Type t = d.GetType();

(3) 还可以调用Type类的静态方法GetTypeO:

Type t = Type。GetType("system.Double");

Type是许多反射功能的入口 。注意,可用的属性都是只读的:可以使用Type确定数据的类型,但不能使用它修改该类型!
 2. Type属性

3. 方法

system.Type的大多数方法都用于获取对应数据类型的成员信息:构造函数、属性、方法和事件等。它有许多方法,但它们都有相同的模式。例如,有两个方法可以获取数据类型的方法的细节信息:GetMethodO和GetMethods. GetMethods方法返回System.Reflection.MethodInfo对象的一个引用,其中包含一个方法的细节信息。GetMethods()返回这种引用的一个数组。其区别是GetMethods()方法返回所有方法的细节信息;而GetMethod()方法返回一个方法的细节信息,其中该方法包含特定的参数列表。这两个方法都有重载方法,重载方法有一个附加的参数,即BindingFlags枚举值,该值表示应返回哪些成员,例如,返回公有成员、实例成员和静态成员等。

举例:

方法:

GetMember()和GetMembers()方法返回数据类型的任何成员或所有成员的详细信息,不管这些成员是构造函数、属性和方法等。

4.  C#反射结合System.Type类实例

namespace myNameSpace
{
class Program
{
static void Main(string[] args)
{
/* TypeView示例 star */ Type t = typeof(myClass); AnalyzeType(t); /* TypeView示例 end */ Console.ReadLine();
} //定义嵌套类myClass
class myClass
{
private string _my; public string My
{
get { return _my; }
set { _my = value; }
}
} //通过System.Type类提供的方法分析类中的成员信息
static void AnalyzeType(Type t)
{
//当前成员名
Console.WriteLine(t.Name); //myClass
//完全限定名,包含命名空间
Console.WriteLine(t.FullName); //myNameSpace.myClass
//命名空间
Console.WriteLine(t.Namespace); //myNameSpace //获取直接继承的类
Type tBase = t.BaseType; if (tBase != null)
{
Console.WriteLine(tBase.Name); //Object
} //该类公共语言运行库提供的类型
Type tUnderlyingSystem = t.UnderlyingSystemType; if (tUnderlyingSystem != null)
{
Console.WriteLine(tUnderlyingSystem.Name); //myClass
} //返回当前类型的所有公共成员数组
MemberInfo[] Members = t.GetMembers();
//遍历数组,迭代每个成员信息
foreach (MemberInfo NextMember in Members)
{
Console.WriteLine(NextMember.DeclaringType + "," + NextMember.MemberType + "," + NextMember.Name);
}
}
}
}

实例转载http://blog.csdn.net/lulu_jiang/article/details/5683879

遍历获取一个类的所有属性名
 private void button1_Click(object sender, EventArgs e)
2 {
3 Type t = typeof(System.Drawing.Color);
4 string className = t.Name;
5 MessageBox.Show(className);
6
7 //获取所有方法
8 System.Reflection.MethodInfo[] methods = t.GetMethods();
9 this.textBox1.Text = "";
10 foreach (System.Reflection.MethodInfo method in methods)
11 {
12 this.textBox1.Text += method.Name + System.Environment.NewLine;
13 }
14
15 //获取所有成员
16 System.Reflection.MemberInfo[] members = t.GetMembers();
17
18 //获取所有属性
19 System.Reflection.PropertyInfo[] properties = t.GetProperties();
20 foreach (System.Reflection.PropertyInfo property in properties)
21 {
22 this.lstColors.Items.Add(property.Name);
23 }
24 }
25
26 private void lstColors_SelectedIndexChanged(object sender, EventArgs e)
27 {
28 this.pictureBox1.BackColor= System.Drawing.Color.FromName(((ListBox)sender).Text);
29 }

  方法,构造函数等一些类型信息的获取可以参考http://www.cnblogs.com/knowledgesea/archive/2013/03/02/2935920.html 这个博客对.net反射讲解很清楚,实例也比较容易理解。

最新文章

  1. Create a new Windows service on windows server2012
  2. flex acionscript png图片去除多余空白,生成合适大小图片
  3. Spring基础—— 在 Spring Config 中使用外部属性文件
  4. 迭代启发式搜索 IDA*
  5. linux下开发c++第二弹--helloworld与makefile
  6. jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究
  7. CSS的兼容性解决方案
  8. Python学习笔记 :01概述
  9. 【Android基础】listview控件的使用(3)------Map与SimpleAdapter组成的多显示条目的Listview
  10. Java Socket编程基础(1)
  11. 小米/红米导入VCF联系人乱码问题解决
  12. js循环出相同name,不同id的按钮,对其进行点击回复操作
  13. Python学习【第2篇】:Python数据结构
  14. 原生JS表格行拖动排序,添加了回调功能
  15. 【转】Python之日志处理(logging模块)
  16. Jquery 上传插件 FineUploader 在 webform 和 mvc 中的使用;
  17. Backbone.js 使用 Collection
  18. [转] Hadoop 2.0 详细安装过程
  19. Android之属性动画(一)
  20. SDN原理 OpenFlow协议 -2

热门文章

  1. Codeforces Round #343 (Div. 2) B. Far Relative’s Problem
  2. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
  3. Tuple元组
  4. lab 1实验报告
  5. hibernate三级缓存介绍
  6. mysql 不支持innodb的问题解决
  7. 利用http协议实现图片窃取
  8. Ubuntu设置目录的读写权限(Linux命令chmod 777 dirName)
  9. Could not find class '****', referenced from method #####
  10. redhat 6 配置 yum 源的两种方法