什么是反射

我们编写的C#代码都可以编译成exe文件或dll文件。暂时先把他们叫做程序集吧,程序集中包含了很多信息。你写了一个类,类中会有字段,有属性,有方法,编译是会把这些信息保存在程序集中,暂时把这些信息叫做程序类型信息吧。可以肯定的是程序集中包含了程序类型信息。
程序类型信息有一个更加专业的术语叫“元数据”(metadata),他们就保存在程序集中。
顺着前面的前景提要,来给反射下一个定义吧。
一个程序在运行时,查看其他程序集或本身的元数据的行为叫做反射
 
反射实战,创建Type类对象
前面说到程序集中包含一个叫元素据的东西,正所谓在面向对象的世界里,万物皆对象,有对象肯定有类型,在C#中有预定义类型(int long string 等)还有程序员自定义类型,比如student类。好奇的你肯定会问那和元数据相关的类叫什么呢?答曰:是一个叫做Type的抽象类,他被设计用来包含类型的各种信息,有那些方法、那些属性、那些特性等各种信息。
细心的你肯定会注意到Type类是抽象的,不能够直接new一个,那怎么创建呢?
可以使用GetType方法和typeof运算符来创建Type对象
解决了创建问题,再来看看Type的属性和方法吧(常见的)
属性:
Name 返回类型的名字
NameSpace 返回包含类型的声明和命名空间
Assembly 返回声明类型的程序集
方法:
GetFields 返回字段列表
GetProperties 返回属性列表
GetMethods 返回类型的方法列表
 
看下面的代码了。
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Reflection; //使用反射必须导入这个命名空间
namespace cShap基础学习
{
class Program
{
static void Main(string[] args)
{
Student stu = new Student();
Type t1 = stu.GetType(); //通过GetType方法创建;
Type t2 = typeof(Student); //通过typeof操作符创建
//我们来看看Type获取到了什么东西吧
Console.WriteLine("Student类型的name是:{0}", t1.Name);
Console.WriteLine("Student类型命名空间是:{0}", t1.Namespace); //获得Student的方法列表
foreach(var m in t1.GetMethods() )
{
Console.WriteLine("方法的名字->{0},返回值->{1}", m.Name, m.ReturnType);
} }
} class Student
{
public void SayHello()
{
Console.WriteLine("Hello~~");
} public void SayHi()
{
Console.WriteLine("Hi``");
}
public String name;
private String pwd;
}
}
 
运行结果
 
关于Type类在MSDN的资料:http://msdn.microsoft.com/zh-cn/library/system.type.aspx
 
《完》

C#基础|初探反射的更多相关文章

  1. 黑马程序员:Java基础总结----反射

    黑马程序员:Java基础总结 反射   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 反射 反射的基石:Class类 Class类代表Java类,它的各个实例对象又分别 ...

  2. Go语言基础之反射

    Go语言基础之反射 本文介绍了Go语言反射的意义和基本使用. 变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息. 值信息:程序运行过程中可动态变化的. 反射介绍 反射是指 ...

  3. Python 基础 三 反射

    Python 基础 三 反射 今天我们先介绍一下反射这个概念,啥是反射?反射就是自己检测自己.在我们Python的面向对象中的反射是啥意思呢?就是通过字符串的形式操作对象相关的属性.python中的一 ...

  4. JAVA基础知识|反射

    一.理解反射 1.1.基础概念 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为ja ...

  5. GO学习-(17) Go语言基础之反射

    Go语言基础之反射 本文介绍了Go语言反射的意义和基本使用. 变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息. 值信息:程序运行过程中可动态变化的. 反射介绍 反射是指 ...

  6. JAVA安全基础之反射

    JAVA安全基础之反射 在JAVA安全中,反射是一个经常使用的技术,所以熟悉使用反射是非常必要的.下面就简单的讲下JAVA的反射的用法 什么是反射 每个类都有对应的Class类对象,该Class类对象 ...

  7. 黑马程序员_Java基础:反射机制(Reflection)总结

    ------- android培训.java培训.期待与您交流! ---------- 反射在java中有非常重大的意义,它是一种动态的相关机制,可以于运行时加载.探知.使用编译期间完全未知的clas ...

  8. Java基础之一反射

    反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))   一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...

  9. python基础(14)-反射&类的内置函数

    反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...

随机推荐

  1. ES 中的那些坑

    数组 1. 数组中的 full-text 字段将被 [analyzed] 2. 数组中[所有元素]的数据类型必须一致 3. 数组的数据类型,以其 [第一个元素]为准 映射 1. 数据类型会自动进行转化 ...

  2. spring+ibatis环境搭建

    简单的spring+ibatis入门实例:ibatis是一种半自动化的持久层框架,它介于JDBC和hibernate之间,使用比较灵活. 一:目录结构 二:需要导入的jar包: 所有的第三方jar包都 ...

  3. Python基础:1.数据类型(字典)

    提示:python版本:2.7,windows系统 1.字典(Dictionary) 由Key-Value组成,一个Key只能对应一个Value >>> colors = {'red ...

  4. GitHub这么火,程序员你不学学吗? 超简单入门教程 干货

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...

  5. 关于HTML5标签不兼容(IE6~8)

    HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单. 比较常用的HTML5的新标签元素有: <hea ...

  6. 今天学习了无序列表和有序列表和使用HTML5创建表格

    ol建立有序列表,该列表可以用设置type="A/a" 其语法架构为 <ol> <li></li> <li></li> ...

  7. C# 3.0 其他XML技术

    使用XmlReader枚举结点: <?xml version="1.0" encoding="utf-8" standalone="yes&qu ...

  8. Android MVP架构浅析

    Android之MVC模式 MVC好处: 从用户的角度出发,用户可以根据自己的需求,选择自己合适的浏览数据的方式.比如说,对于一篇在线文档,用户可以选择以HTML网页的方式阅读,也可以选择以pdf的方 ...

  9. [转]如何学好windows c++编程 学习精髓(收集,整理)

    以下是很多VC爱好者的学习经历,希望对大家有所帮助: 我记得我在网上是这么说的:先学win32的SDK,也就是API, 再学MFC,这么一来呢,就先有个基础,MFC是API的封装, 如果API用的熟了 ...

  10. iOS创建UUID

    - (NSString *)getUUID { CFUUIDRef uuidObj = CFUUIDCreate(nil); //create a new UUID NSString * uuidSt ...