反射可在运行时获取类型信息并动态操作对象。通过typeof或GetType()获取Type对象,用Assembly.LoadFrom加载程序集,Activator.CreateInstance创建实例,再通过GetMethod和Invoke调用方法。常用于插件系统、ORM、序列化等场景,但性能较低,需谨慎使用。

.NET中的反射(Reflection) 是一种在运行时检查和操作程序集、类型、方法、属性等元数据的机制。通过反射,你可以在不知道具体类型的情况下,动态创建对象、调用方法、获取属性值,甚至分析类的结构。它让程序具备“自省”能力,是实现插件架构、序列化、依赖注入等高级功能的基础。
每个类型在运行时都有一个对应的 Type 对象,可以通过它访问成员信息:
Type type = typeof(string);
MethodInfo[] methods = type.GetMethods();
foreach (var method in methods)
{
Console.WriteLine(method.Name);
}
你可以不在编译时引用程序集,而在运行时动态加载DLL文件:
try
{
Assembly assembly = Assembly.LoadFrom("MyPlugin.dll");
Type[] types = assembly.GetTypes();
foreach (Type t in types)
{
Console.WriteLine(t.Name);
}
}
catch (FileNotFoundException ex)
{
Console.WriteLine("找不到程序集:" + ex.Message);
}
有了 Type 对象后,可以创建实例并调用其方法:
Assembly assembly = Assembly.LoadFrom("MyLibrary.dll");
Type myType = assembly.GetType("MyLibrary.MyClass");
object instance = Activator.CreateInstance(myType);
MethodInfo method = myType.GetMethod("SayHello");
string result = (string)method.Invoke(instance, null);
Console.WriteLine(result);
如果方法有参数,传入 object 数组即可:
method.Invoke(instance, new object[] { "张三" });
反射常用于以下场景:
注意:反射性能低于直接调用,频繁使用可结合 Delegate 或 Expression 缓存调用逻辑。
基本上就这些。以上就是.NET中的反射(Reflection)是什么?如何动态地加载程序集和调用方法?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号