Reflection反射有四种表现方式:
1.查看元数据metadata(通过attributes特性表示的),用于显示等
2.类型的发现(类型、类型中定义的属性、方法、事件等)
3.推迟绑定对象,可以动态实例化对象并调用方法
4.动态创建新的类型
类型发现的实例:
//读取库
Assembly a = Assembly.Load("Mscorlib.dll");
//读取库的所有类型,存入数组
Type[] types = a.GetTypes();
//读取一个类
Type theType = Type.GetType("System.Reflection.Assembly");
//读取类的所有成员,包含方法、属性、事件等等
MemberInfo[] mbrInfoArray = theType.GetMembers();
//只获取成员方法
MemberInfo[] mbrInfoArray = theType.GetMethods();
//根据条件查询所有类型的成员,比如只获取名字以Get开头的方法
MemberInfo[] mbrInfoArray = theType.FindMembers(MemberTypes.Method, BindingFlags.Default, Type.FilterName, "Get*");
动态读取类、生成实例、及调用方法的例子:
//读取库/获取类型,创建对象实例
Type theMathType = Type.GetType("CustomMath");
Object theObj = Activator.CreateInstance(theMathType);
//创建参数类型
Type[] paramTypes = new Type[1];
paramTypes[0]= Type.GetType("System.Double");
//获取类型中的方法,这里需要对类型中方法有一定认识,不然就不知道调用哪个方法,导致程序不可控
MethodInfo CosineInfo = theMathType.GetMethod("Cos", paramTypes);
//生成参数
Object[] parameters = new Object[1];
parameters[0] = 45;
//调用实例方法
Object returnVal = CosineInfo.Invoke(theObj, parameters);
动态创建新的类型(reflection emit反射发出),一般用的比较少。
分享到:
相关推荐
C#反射(Reflection)详解 什么是反射 命名空间和装配体的关系
在C#编程语言中,反射(Reflection)是一个强大的工具,它允许程序在运行时检查自身的行为,包括类、接口、属性、方法等元数据信息,并能够动态地创建对象和调用方法。这篇压缩包文件提供了关于C#反射的实践示例,...
2. 命名空间:`System.Reflection`命名空间包含所有与反射相关的类。它是访问类型、成员和元数据的关键入口点。 二、动态类型创建与实例化 1. `Activator.CreateInstance()`: 这个静态方法允许我们在运行时根据类型...
C#反射(Reflection)是.NET框架提供的一种强大的元数据访问机制,它允许程序在运行时检查自身的行为和属性。在C#中,反射允许我们动态地创建对象、获取类型信息、调用方法、访问字段和属性,以及遍历类型的继承层次...
C#反射 反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定...
反射是.NET框架提供的一种特性,通过System.Reflection命名空间中的类来实现。主要类包括Assembly(程序集)、Type(类型)、ConstructorInfo(构造函数信息)、MethodInfo(方法信息)和PropertyInfo(属性信息)...
反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间。 1、假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile(程序集路径,不能是...
在本篇文章中,我们将深入探讨如何利用C#中的反射机制来访问类中的私有变量或方法。通过一个具体的示例代码,我们将详细了解反射的基本概念、使用场景以及如何具体操作。 ### 一、C#反射机制简介 #### 1.1 什么是...
### C#中使用反射调用动态加载的DLL文件中的方法 #### 反射的作用与应用场景 反射是.NET框架中的一项重要技术,它允许程序在运行时动态地获取自身的元数据(如类、方法、属性等)并进行操作。具体而言,反射主要有...
"ReflectionExample"可能是包含一系列C#代码示例的项目,用于演示如何使用反射来实现动态编程。下面将详细阐述C#反射的基本概念、用途及其常见操作。 一、什么是C#反射? C#反射是一种在运行时检查类型信息的能力...
本文介绍了一种通过C#反射机制操作Excel的方法,这种方式相比于传统的OLEDB或其他组件方式更加灵活且直接。通过对Excel COM对象模型的深入理解并结合反射技术,我们可以实现对Excel文档的各种操作,包括但不限于打开...
在C#中,反射主要通过`System.Reflection`命名空间中的类来实现。它能够动态地获取类型信息(如类、接口、结构等)和成员信息(如方法、属性、字段),并能在运行时创建和调用这些类型及成员。 1. **类型信息的获取...
在C#编程语言中,反射是一个强大的特性,它允许运行时的代码动态地获取类型信息并操作对象。本文将深入探讨C#中的反射,并通过具体的实例来帮助大家更好地理解和掌握这个概念。 首先,我们需要理解什么是反射。反射...
在C#中,`System.Reflection`命名空间提供了关于反射的所有功能。 普通反射主要通过`Type`类来实现,它代表了一个.NET类型。我们可以使用`typeof()`操作符或者`Assembly.GetType()`方法来获取`Type`对象。一旦有了`...
C#的反射机制是基于.NET Framework的System.Reflection命名空间提供的类来实现的。 使用场景: 1. 动态类型创建:通过Type类的CreateInstance方法,可以在运行时创建任何类型的实例,无需预先知道其具体类型。 2. ...
C#反射是.NET框架提供的一种强大机制,它允许在运行时检查和操作程序集、类型、接口、方法、属性等元数据。通过反射,开发者可以在程序执行过程中动态地获取类型信息,并实例化对象、调用方法或访问字段。这篇学习...
在C#编程中,反射是一种强大的机制,允许在运行时检查和操作程序集、类型、方法、属性等元数据。利用反射,我们可以动态地创建对象,这意味着在代码执行时,我们能够实例化未知类型的对象,这在处理插件系统、动态...
在C#编程中,反射是一种强大的工具,它允许我们在运行时检查类型、接口、属性、方法等信息,并能动态地创建对象和调用方法。在本案例中,我们将探讨如何利用反射来实现变量的动态赋值,特别是在WPF(Windows ...
C#反射(Reflection)是.NET 中的重要机制,通过反射,可以在运行时获得.NET 中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和...