什么是反射

我们编写的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. Azure PowerShell 创建虚拟机

    # 指定订阅名称$subscriptionName="订阅名称"# 指定云服务名称$serviceName="云服务名称"# 指定用来保存虚拟机VHD的存储$s ...

  2. 让ubuntu使用root帐号并让winscp以root身份登录

    ubuntu 服务器默认的root账号是没有激活的,需要用初装的用户账号给root设置管理密码: $ sudo passwd root  //用sudo修改root帐户 Password: //输入密 ...

  3. big data vs HPC

    When I tried some SIMD optimization in large-scale simulation(HPC), it is so difficult to implment. ...

  4. jQuery实现jsonp源码分析(京东2015面试)

    // Bind script tag hack transportjQuery.ajaxTransport( "script", function(s) { // This tra ...

  5. ant design 自定义表单验证大全

     需求是 账号名可以是手机号也可以是邮箱 要做手机号和邮箱的验证,官网的那个验证规则不匹配  怎么自定义验证规则?  一:组件部分 <Form horizontal> <Row gu ...

  6. ASP.NET伪静态-无法读取配置文件,因为它超过了最大文件大小的解决办法

    一直都在使用微软URLRewriter,具体的使用方法我就不多说了,网上文章很多. 但最近遇到一个问题,就是当web.config文件里面设置伪静态规则过多,大于2M的时候,就报错:无法读取配置文件, ...

  7. 反汇编windows htonl()函数

    因为自己在系统内核写网络程序有时候需要调用htons htonl 这样的函数进行转换,但由于内核只能调用c运行库,别的API不能调用.自己也接触过一点汇编,从来没有去学过.看过老码识途这本书前几章,如 ...

  8. linux配置学习笔记(一):如何提高ssh连接的速度

    服务器端sshd配置文件 /etc/ssh/sshd_config 看是否有如下的两条配置条目 GSSAPIAuthentication no UseDNS no 如果前面带#,请把#删掉,或者新添加 ...

  9. 01线性表顺序存储_List--(线性表)

    #include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...

  10. FreeMarker在JAVA中应用入门

    在项目中通常有生成XML文件发送到另一个系统的需求,简单的办法可以是用一个XML模板,通过Freemarker替换其中的'Mark'(${}),生成最终的XML文件. 下面记录了一下简单的示例步骤: ...