C#基础|初探反射

什么是反射

我们编写的C#代码都可以编译成exe文件或dll文件。暂时先把他们叫做程序集吧,程序集中包含了很多信息。你写了一个类,类中会有字段,有属性,有方法,编译是会把这些信息保存在程序集中,暂时把这些信息叫做程序类型信息吧。可以肯定的是程序集中包含了程序类型信息。

程序类型信息有一个更加专业的术语叫“元数据”(metadata),他们就保存在程序集中。

顺着前面的前景提要,来给反射下一个定义吧。

一个程序在运行时,查看其他程序集或本身的元数据的行为叫做反射

反射实战,创建Type类对象

前面说到程序集中包含一个叫元素据的东西,正所谓在面向对象的世界里,万物皆对象,有对象肯定有类型,在C#中有预定义类型(int
long string
等)还有程序员自定义类型,比如student类。好奇的你肯定会问那和元数据相关的类叫什么呢?答曰:是一个叫做Type的抽象类,他被设计用来包含类型的各种信息,有那些方法、那些属性、那些特性等各种信息。

细心的你肯定会注意到Type类是抽象的,不能够直接new一个,那怎么创建呢?

可以使用GetType方法和typeof运算符来创建Type对象

解决了创建问题,再来看看Type的属性和方法吧(常见的)

属性:

Name
返回类型的名字

NameSpace 返回包含类型的声明和命名空间

Assembly
返回声明类型的程序集

方法:

GetFields
返回字段列表

GetProperties
返回属性列表

GetMethods
返回类型的方法列表

看下面的代码了。


 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 using System.Reflection; //使用反射必须导入这个命名空间
7 namespace cShap基础学习
8 {
9 class Program
10 {
11 static void Main(string[] args)
12 {
13 Student stu = new Student();
14 Type t1 = stu.GetType(); //通过GetType方法创建;
15 Type t2 = typeof(Student); //通过typeof操作符创建
16 //我们来看看Type获取到了什么东西吧
17 Console.WriteLine("Student类型的name是:{0}", t1.Name);
18 Console.WriteLine("Student类型命名空间是:{0}", t1.Namespace);
19
20 //获得Student的方法列表
21 foreach(var m in t1.GetMethods() )
22 {
23 Console.WriteLine("方法的名字->{0},返回值->{1}", m.Name, m.ReturnType);
24 }
25
26
27 }
28 }
29
30 class Student
31 {
32 public void SayHello()
33 {
34 Console.WriteLine("Hello~~");
35 }
36
37 public void SayHi()
38 {
39 Console.WriteLine("Hi``");
40 }
41 public String name;
42 private String pwd;
43 }
44 }

运行结果

关于Type类在MSDN的资料:http://msdn.microsoft.com/zh-cn/library/system.type.aspx

《完》

C#基础|初探反射

时间: 2024-11-17 08:01:40

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

JAVA基础知识|反射

一.理解反射 1.1.基础概念 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. "运行状态",如何理解? "运行状态"体现了反射的应用场景,当一些类,不需要提前加载进JVM内存,而是在运行时根据需要进行加载的时候,就可以通过反射进行动态加载 1.2.如何理解反射? 学习过java的童鞋,肯定对spring.hibernate一

MyBATIS插件原理第一篇——技术基础(反射和JDK动态代理)(转)

在介绍MyBATIS插件原理前我们需要先学习一下一些基础的知识,否则我们是很难理解MyBATIS的运行原理和插件原理的. MyBATIS最主要的是反射和动态代理技术,让我们首先先熟悉它们. 1:Java反射技术 在Java中反射技术已经大行其道,通过不断的优化性能得到了巨大的提高,而反射技术使得Java的可配置性大大提高.让我们来写一个服务打印hello + 姓名. import java.lang.reflect.InvocationTargetException; import java.l

Java基础:反射机制(Reflection)总结

反射在java中有非常重大的意义,它是一种动态的相关机制,可以于运行时加载.探知.使用编译期间完全未知的classes.换句话说,java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods具体定义),并生成其对象实体.或对其fields设值.或使用其methods.反射是框架的基础,而框架能大大节省java程序的开发成本,是日后工作中经常会碰到的技术.所以,学习好反射的重要性就不言而喻了. 一.概念

Java基础加强-反射、注解

基础加强 一回顾泛型 二泛型的反射 三注解 基础加强 一.回顾泛型 泛型的基本概念: 以ArrayList<E>为例: ① ArrayList<E>中的E称为类型参数变量 ArrayList<Integer>中的Integer称为实际类型参数 ②整个ArrayList<E>称为泛型类型 整个ArrayList<Integer>称为参数化的类型(ParameterizedType) 定义一个泛型方法: : // <T>:泛型定义的声明,

Java基础之—反射

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))   一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 要想解剖一个类,必须先要获取到该类的字节码文件对象.而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对

【转】Java基础之—反射

本文章来源:https://blog.csdn.net/sinat_38259539/article/details/71799078.感谢敬业的小码哥的总结. 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反

Java基础增强-反射机制

1 反射机制简介 Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法.这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制.反射被视为动态语言的关键. 反射这一概念最早由编程开发人员Smith在1982年提出,主要指应用程序访问.检测.修改自身状态与行为的能力.这一概念的提出立刻吸引了编程界的极大关注,各种研究工作随之展开,随之而来引发编程革

Java基础之反射

Java反射是指运行时获取类信息,进而在运行时动态构造对象.调用对象方法及修改对象属性的机制.百度百科的定义:“JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. 一.反射的用途 Java的反射机制可以做3件事:运行时创建对象.运行时调用方法.运行时读写属性.进而实现以下功能:调用一些私有方法,实现黑科技.比如双卡短信发送.设置状态栏颜色.自动挂电

Java基础之反射和动态代理

1,反射是依赖于Class对象,然后根据Class对象,去操作该类的资源的.Class对象是发射的基石! 问题1:人这类事物用什么表示?汽车这类事物用什么表示>计算机文件用什么表示?有如此多的事物该用什么表示? 答案:Person类,Car类,File类,这么多的类也是一类事物,这类事物用Class表示. 问题2:Person类的对象,我们知道代表一个具体的人.那么Class类的对象,又代表什么? 一个类,在硬盘上表示一个.class文件,JVM启动的时候,把文件加载到内存上,占用一片空间,称为