时间:2024-11-08 来源:网络 人气:
绯荤粺鑿滃崟,又称反射(Reflection),是.NET框架提供的一种强大功能。它允许在运行时查询、操作和修改程序集(Assembly)、类型(Type)和成员(Member)的信息。简单来说,反射就是让程序在运行时了解自己的结构和行为。
在C中,每个程序集、类型和成员都有一个唯一的元数据(Metadata)描述其属性和行为。这些元数据存储在程序集的PE(Portable Executable)文件中。通过反射,程序可以在运行时访问这些元数据,从而实现对程序集、类型和成员的动态操作。
1. 动态加载程序集:在运行时动态加载外部程序集,实现插件式开发。
2. 动态创建对象:根据类型名称动态创建对象实例,无需在编译时指定类型。
3. 动态调用方法:根据方法名称动态调用对象的方法,无需在编译时指定方法。
4. 动态访问属性:根据属性名称动态访问对象的属性,无需在编译时指定属性。
5. 动态修改程序集:在运行时修改程序集的内容,如添加、删除类型和成员等。
1. Assembly:表示程序集,提供程序集的元数据信息。
2. Type:表示类型,提供类型的元数据信息。
3. MemberInfo:表示成员,如方法、属性、字段等,提供成员的元数据信息。
4. MethodInfo:表示方法,提供方法的元数据信息。
5. PropertyInfo:表示属性,提供属性的元数据信息。
以下是一个简单的示例,演示如何使用反射动态创建对象并调用其方法:
```csharp
using System;
using System.Reflection;
public class Program
public static void Main()
{
// 获取类型
Type type = typeof(Person);
// 创建对象实例
object instance = Activator.CreateInstance(type);
// 获取方法
MethodInfo method = type.GetMethod(