什么是反射

我们编写的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. 数据结构与算法分析(2)——表、栈和队列

      抽象数据类型     抽象数据类型(ADT)是一系列操作的集合.诸如表.集合.图和他们的操作一起可以看做是抽象数据类型 表 List 表的实现有两种:数组和链表.数组实现的表在插入和删除操作上的花 ...

  2. Nodejs v4.x.0API文档学习(1)简介

    文档参考地址:https://nodejs.org/dist/latest-v4.x/docs/api/ 简介 下面是用nodejs编写的一个web服务的例子,返回"Hello World& ...

  3. mongodb学习相关网址

    1.MongoDB官网 https://www.mongodb.org 2.MongoDB教程 http://www.yiibai.com/mongodb 3.MongoDB教程http://www. ...

  4. strstr,strchr,strtr 比较

    strstr - 查找字符串的首次出现 查找 "Shanghai" 在字符串中的第一次出现,并返回字符串的剩余部分: echo strstr("I love Shangh ...

  5. Swift枚举|结构体|类|属性|方法|下标脚本|继承

    1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左 ...

  6. 20160510--hibernate懒加载问题

    懒加载 通过asm和cglib二个包实现:Domain是非final的. 1.session.load懒加载. 2.one-to-one(元素)懒加载: 必需同时满足下面三个条件时才能实现懒加载 (主 ...

  7. Android寒假实训云笔记总结——欢迎页

    欢迎页使用的是viewpager,需要适配器. 注意点: 1.判断是否是第一次进入这个app. 2.欢迎页小圆点的逻辑. 实现原理: 首先在activity_welcome放入viewpager和固定 ...

  8. Android之Http网络编程(二)

    上一篇文章简单的介绍了Android中http的两种通信方式,并且分别用获取百度网页做了实例.但是在实际应用中,更多的是客户端通过请求的参数来实现在服务端的具体操作,并最终返回数据给客户端.因为我们不 ...

  9. apache ambari web页面无法访问解决办法

    ambari-server启动成功,但是页面无法访问 作者:Bo liang链接:http://www.zhihu.com/question/34405898/answer/115001510来源:知 ...

  10. Jquery中Ajax异步请求中的async参数的作用

    之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html <a href="javascript:void(0)" on ...