• .NET 中的反射


    反射概念

    反射提供封装程序集、模块和类型的对象。

    反射技术主要基于System.Reflection 命名空间中的类与 System.Type 。

    反射用途简单来说就是获取有关程序集中的类型信息。

    可以使用反射动态地创建类的实例,将类型绑定到现有的对象,或从现有的对象中获取类型,然后调用其方法、字段或属性。

    反射的典型用法:

    • Assembly 来定义和加载程序集。加载程序集清单中的模块、获取类型、创建实例。
    • Module 主要是发现模块中的类。
    • ConstructorInfo 主要是发现构造函数信息。使用Type的 GetConstructors 或 GetConstructor 方法来调用特定构造函数。
    • MethodInfo 主要是发现方法的实现详细信息。使用Type的 GetMethods 或 GetMethod 方法来调用特定方法。
    • FieldInfo 主要是获取和设置字段值。
    • EventInfo 主要是添加和删除事件处理程序。
    • PropertyInfo 主要是获取和设置属性值。
    • ParameterInfo 主要是获取参数的名称、数据类型以及参数在方法签名中的位置。
    • CustomAttributeData 主要是获取自定义特性的信息。

    动态读取dll

    • Load: dll名称不需要后缀。
    • LoadFrom: dll全名称,需要后缀。
    • LoadFile: 全路径,需要dll后缀。

    举例:

    namespace ConsoleApp1
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                //加载dll程序集
                Assembly assembly = Assembly.Load("DbHelper");
    
                //获取类型、参数(命名空间名称.类名称)
                Type type = assembly.GetType("DbHelper.SqlHelper");
    
                //创建实例(命名空间名称.类名称)
                var instance = assembly.CreateInstance("DbHelper.SqlHelper");
    
                //获取指定方法
                MethodInfo methodInfo = type.GetMethod("GetSqlServerName");
    
                //传入参数
                var obj = new object[] { "Mike" };
    
                //调用方法(实例,参数)
                methodInfo.Invoke(instance, obj);
                
                    
                Console.ReadKey();
            }
        }
    }
    //DbHelper.dll文件生成路径指定到ConsoleApp1程序的bin目录,否则引用失败。
    namespace DbHelper
    {
        public class SqlHelper
        {
            public void GetSqlServerName(string name)
            {
                Console.WriteLine($"Name:{name}");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
  • 相关阅读:
    YOLOv5~数据集结构解析
    6.二叉树.题目3
    java class 文件格式解析
    【畅购商城】购物车模块之修改购物车以及结算
    Java面向对象(基础)-- 类的成员之三:构造器(Constructor)
    工程电磁场复习基本知识点
    AI视频模型已成为科技领域的新热点
    git远程仓库的创建(养成好的习惯,小马教你提交代码到远程仓库中)
    Java安全之Mojarra JSF反序列化
    美团三年,总结的10条血泪教训
  • 原文地址:https://blog.csdn.net/qq_35434967/article/details/127871492