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 

  • 相关阅读:
    Photon Server 实现注册与登录(五) --- 服务端、客户端完整代码
    机器学习小白笔记系列——支持向量机
    机器学习小白笔记系列——条件随机场
    机器学习小白笔记系列——EM算法
    机器学习小白笔记系列——线性回归
    多元统计分析学习笔记——概论及数据描述知识点回顾
    ORACLE的SPFILE与PFILE
    简单的点餐系统
    Linux系统中CTG的安装,应用程序开发以及调试
    Netstat命令
  • 原文地址:https://www.cnblogs.com/hnzheng/p/12751636.html
Copyright © 2011-2022 走看看