【C#随手记】反射机制使用的简单记录

using System.Reflection;//引用System.Reflection命名空间
using System;//引用System命名空间


public class ReflectionTest
{
    
    
    private Assembly assembly;//声明一个程序集

    void Main()
    {
    
    
        #region 第1步:获取程序集
        //通过文件加载dll给程序集
        assembly = Assembly.LoadFile("C:/Users/Njiyue/Desktop/Test.dll");
        #endregion

        #region 第2步:通过程序集获取一个Type
        //通过Assembly的“GetType”函数,传入(命名空间.类)来获取某类型
        Type classType = assembly.GetType("nameSpace.Class");
        #endregion

        //————————————————获取到Type之后,接下来就仅仅是对Type进行操作了
        //————————————————可以重点学习一下Type类的使用
        

        #region 第3步:对这个Type进行操作,可以获取Type的属性、字段,执行Type中的函数等
        //通过Type的“GetProperty”函数获取类中的属性,
        //传入 “BindingFlags.Static、BindingFlags.Instance、 BindingFlags.Public、BindingFlags.NonPublic”参数
        //表示“静态、实例、公开、不公开”的属性
        PropertyInfo propertyInfo = classType.GetProperty("propertyName", BindingFlags.Instance | BindingFlags.Public);
        //PropertyInfo.GetValue(),传入一个实例对象,来获取这个实例对象的属性值
        propertyInfo.GetValue(new object());
        //PropertyInfo.SetValue(),传入一个实例对象和要修改的值,来设置这个实例对象的属性值
        propertyInfo.SetValue(new object(), new object());

        //通过Type的“GetField”函数获取类中的字段
        FieldInfo fieldInfo = classType.GetField("fieldName", BindingFlags.Instance | BindingFlags.NonPublic);
        //获取值和赋值方法与属性一致
        fieldInfo.GetValue(new object());
        fieldInfo.SetValue(new object(), new object());

        //通过Type的“GetMethod”函数获取类中的函数
        //传入 “BindingFlags.Static、BindingFlags.Instance、 BindingFlags.Public、BindingFlags.NonPublic”参数
        //表示“静态、实例、公开、不公开”的函数
        MethodInfo methodInfo = classType.GetMethod("MethodName", BindingFlags.Static | BindingFlags.Public);
        //使用MethodInfo.Invoke()来执行方法
        //public object Invoke(object obj, object[] parameters);
        //方法第一个参数是一个实例对象,如果是静态函数,就填null,第二个参数是这个函数需要传入的参数
        //使用as关键字将函数的返回值转为指定类型
        object returnObj = methodInfo.Invoke(null, null) as object;
        //使用 Delegate CreateDelegate(Type type, object firstArgument, MethodInfo method); 可以根据MethodInfo创建一个委托
        Func<float> fun = (Func<float>)Delegate.CreateDelegate(typeof(Func<float>), new object(), methodInfo);
        fun();
        #endregion
    }

}


个人笔记 仅供参考 欢迎指正

猜你喜欢

转载自blog.csdn.net/m0_55907341/article/details/123198526
今日推荐