zoukankan      html  css  js  c++  java
  • 反射 —普通类、带泛型的类、带泛型的类与带泛型的方法

      public class GeneralClass
        {
    
            public string GetName(string name)
            {
                Console.WriteLine($"{name}");
                return $"{name}";
            }
        }
        public class GenericMthod
        {
    
            public string GetName<T1, T2>(T1 name, T2 sex)
            {
                Console.WriteLine($"{name}{sex}");
                return $"{name}{sex}";
            }
        }
        public class GenericClassAndMethod<T>
        {
            public string GetName<T1, T2>(T1 name, T2 sex)
            {
                Console.WriteLine($"{name}{sex}");
                return $"{name}{sex}";
            }
            public void Get()
            {
    
            }
        }
        class Program
        {
            static void Main(string[] args)
            {    
                // 普通类/普通方法
                {
                    // 获取类
                    var type = typeof(GeneralClass);
                    //获取方法
                    var method = type.GetMethod("GetName");
                    // 创建实例
                    var obj = Activator.CreateInstance(type);
                    // 参数
                    var paramaters = new object[] { "111" };
                    // 执行             
                    method.Invoke(obj, paramaters);
                }
    
                {
                    var type = typeof(GenericMthod);
                    var genericMthod = type.GetMethod("GetName");
                    // 指定泛型方法中泛型参数的类型 ,这里指定 GetName<T1,T2>中T1 的类型为string,T2为int , 不指定会报错
                    var genericMthods = genericMthod.MakeGenericMethod(typeof(string), typeof(int));
                    var obj = Activator.CreateInstance(type); // 创建实例
                    var paramaters = new object[] { "hnzheng", 11111 }; // 对应的泛型参数值
                    genericMthods.Invoke(obj, paramaters); // 执行方法
    
                }
                {
                    var type = typeof(GenericClassAndMethod<>);
                   // var genericMthod = type.GetMethod("GetName");
                  
                    // 创建泛型实例
                    var ntype = type.MakeGenericType(typeof(int));//指定GenericClassAndMethod<T> T的类型
                    var genericMthod = ntype.GetMethod("GetName");  // 这里要用泛型类型去获取 泛型方法,如果使用type.GetMethod("GetName");会报错
                    var obj = Activator.CreateInstance(ntype); // 创建实例
    
                    // 调用非泛型方法
                    var method = ntype.GetMethod("Get");
                    method.Invoke(obj, null);
    
                    // 调用泛型方法
                     // 指定泛型方法中泛型参数的类型 ,这里指定 GetName<T1,T2>中T1 的类型为string,T2为int , 不指定会报错
                    var genericMthodss = genericMthod.MakeGenericMethod(typeof(string), typeof(int));
                    //  指定参数 
                    var paramaters = new object[] { "hnzheng", 11111 }; // 对应的泛型参数值 
                    //genericMthodss.Invoke(null, null);
                    genericMthodss.Invoke(obj, paramaters); //
    
    
                    // 
                }

     1、 mvc 其实 也是利用反射,action重载比较麻烦,无法判断调用那个方法,只能通过httpmethod  来区分

      2、   AOP 

  • 相关阅读:
    php 获取文件的md5
    php 获取远程文件大小
    chrome 浏览器,大屏显示
    Mac 中Java项目打包上线
    如何在苹果M1芯片 (Apple Silicon) 上安装 JDK 环境
    Mysql 替换数据中的部分内容,比如迁移服务器,需要修改图片地址
    docker安装指定版本minio
    docker 查询镜像并删除
    docker 容器名称已存在
    docker 安装minio
  • 原文地址:https://www.cnblogs.com/hnzheng/p/12751636.html
Copyright © 2011-2022 走看看