在C#编程中,反射(Reflection) 是一项强大的功能,它允许程序在运行时检查和操作类型、方法、属性等元数据。通过 C#反射,我们可以在不知道具体类型的情况下,动态地创建对象、调用方法或读取属性值。这对于框架开发、插件系统、序列化/反序列化等场景非常有用。

简单来说,反射 就是程序在运行时“自省”的能力。比如,你有一个对象,但你不知道它属于哪个类,这时你可以使用反射来获取它的类型、字段、方法等信息。
在 .NET 中,所有类型信息都存储在 System.Type 类中。通过 Type 对象,我们可以访问类的名称、命名空间、基类、实现的接口、公共成员等。
有三种常见方式获取 Type 对象:
typeof(类型名).GetType() 方法Type.GetType("完整类型名")// 定义一个简单的类class Person{ public string Name { get; set; } public int Age { get; set; } public void SayHello() { Console.WriteLine($"Hello, I'm {Name}"); }}// 获取 Type 的三种方式Type type1 = typeof(Person);Person p = new Person();Type type2 = p.GetType();Type type3 = Type.GetType("YourNamespace.Person"); // 注意:需完整命名空间Console.WriteLine(type1 == type2); // 输出 True一旦有了 Type 对象,就可以调用其方法获取详细信息。以下是一些常用方法:
Name:获取类型的简短名称FullName:获取包含命名空间的完整名称GetProperties():获取所有公共属性GetMethods():获取所有公共方法GetFields():获取所有公共字段using System;using System.Reflection;class Program{ static void Main() { Type personType = typeof(Person); Console.WriteLine($"类型名称: {personType.Name}"); Console.WriteLine($"完整名称: {personType.FullName}"); Console.WriteLine($"是否为类: {personType.IsClass}"); Console.WriteLine("\n属性列表:"); foreach (PropertyInfo prop in personType.GetProperties()) { Console.WriteLine($"- {prop.Name} ({prop.PropertyType.Name})"); } Console.WriteLine("\n方法列表:"); foreach (MethodInfo method in personType.GetMethods()) { // 过滤掉继承自 Object 的方法(如 ToString, Equals 等) if (method.DeclaringType == personType) { Console.WriteLine($"- {method.Name}()"); } } }}运行上述代码,你将看到类似如下输出:
类型名称: Person完整名称: YourNamespace.Person是否为类: True属性列表:- Name (String)- Age (Int32)方法列表:- SayHello()
掌握 动态类型分析 能力,可以让你编写更灵活、可扩展的代码。例如:
虽然反射性能略低于直接调用,但在需要灵活性的场景下,它是不可或缺的工具。
本文介绍了 C#反射 的基本概念,演示了如何通过 Type 对象 获取类型信息,并展示了实际代码示例。希望这篇 C# Reflection教程 能帮助你理解如何在运行时进行 动态类型分析。随着你对 .NET 生态的深入,反射将成为你工具箱中的重要武器。
提示:在生产环境中使用反射时,建议缓存 Type 和 MemberInfo 对象以提升性能。
本文由主机测评网于2025-12-05发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123393.html