反射 介绍System.Type类
本节先介绍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()方法返回数据类型的任何成员或所有成员的详细信息,不管这些成员是构造函数、属性和方法等。
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反射讲解很清楚,实例也比较容易理解。
反射 介绍System.Type类的更多相关文章
- 反射,System.Type类
http://m.blog.csdn.net/blog/woddle/40623333 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到 ...
- 反射+type类+Assembly+特性
什么是元数据,什么是反射: 程序是用来处理数据的,文本和特性都是数据,而我们程序本身(类的定义和BLC中的类)这些也是数据. 有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程 ...
- C# - 系统类 - Type类
Type类 ns:System Type类封装类型 它的实例提供一个特定类型的数据和函数成员的信息 可以使用Type类实例来调用类型的成员 一般将Type类用于反射 Type类的静态字段如下 Empt ...
- 反射,得到Type引用的三种方式
1.使用System.Object.GetType()得到Type引用 使用一个SportsCar实例得到类型信息 SportsCar sc=new SportsCar(); Type t=sc.G ...
- C# 反射和Type类
一.元数据和反射 1.1 定义 大多数程序都要处理数据,包括读.写.操作和显示数据.然而,对于某些程序来说,它们操作的不是数字.文本或图形,而是程序和程序类型本身的信息. ● 有关程序及其类型的数据被 ...
- Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法
Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...
- python 面向对象专题(六):元类type、反射、函数与类的区别、特殊的双下方法
目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3. 函数与类的区别 4. 特殊的双下方法 1. 元类type type:获取对象 ...
- 透彻分析反射的基础_Class类
一.反射的基石--->Class类 1. Java类用于描述一类事物的特性,该类事物有什么属性,没有什么属性,值域这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性值 ...
- c#反射机制判断同一个类的两个实例的值是否完全一样
; i < properties1.Length; i++) { string s = properties1[i].DeclaringTyp ...
随机推荐
- 通过js获取计算机内网ip,计算机名,mac地址
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- DIV遮罩层传值
今天费了很大的劲儿才搞定!下面贴出代码和总结: 1.首先是前台代码: <%@ Page Title="" Language="C#" MasterPage ...
- openstack 制作大于2TB根分区自动扩容的CENTOS镜像
制作镜像的时候默认分的是30G空间 qemu-img create -f raw centos.img 30G 看官网文档安装完系统需要安装cloud-init和clout-utils包,本人安装了完 ...
- GCC扩展 __attribute__ ((visibility("hidden")))
试想这样的情景,程序调用某函数A,A函数存在于两个动态链接库liba.so,libb.so中,并且程序执行需要链接这两个库,此时程序调用的A函数到底是来自于a还是b呢? 这取决于链接时的顺序,比如先链 ...
- 如何将Android默认的Camra程序导入到eclipse中
由于工作需要将camera源码导入到Eclipse中,找了很多的方法,现将自己的整理发出来.... 由于开发的要求,需要将Android默认的Camra程序导入到eclipse中,进行修改和再开发. ...
- [GIF] GIF Loop Coder - Animation Functions
Previous, we animate the item by passing an array to tell the start position and end position. To ma ...
- Java bit、byte、位、字节、汉字、字符
package com.suypower.chengyu.test; public class ByteTest { /** * byte 8 bits -128 - + 127 * 1 bit = ...
- mysql.cnf 配制文件详解
代码如下: [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedi ...
- 解锁Dagger2使用姿势(一)
毫无疑问,Dagger2的 上手是有门槛的,有门槛是因为它里边的概念多,用起来复杂,可是一旦你学会了Dagger2的使用,你一定会爱不释手的.与ButterKnife和AndroidAnnotatio ...
- WPF遇到无边框的问题
今天做一个项目采用的是WPF开发并且在制作窗体的时候用到无边框的问题,由于WPF开发和winform开发用点不一样, 遇到了这个问题就帮这个遇到问题的解决方法写下来方便以后忘记了和给一些遇到的朋友做一 ...