• 如何用反射实现如下的泛型方法调用?


     

    1. 代码

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Reflection;

    namespace GenericReflectingApp1

    {

        class Program

        {

            static void Main(string[] args)

            {

                myGeneric<string> myString = new myGeneric<string>();

     

                myString.Show<int>(100);

     

                ShowTypeInfo(myString.GetType());

     

                //出现错误,"发现不明确的匹配。",

                //MethodInfo myMethod = myString.GetType().GetMethod("Show");

     

                //如何指定泛型方法参数

                //MethodInfo myMethod = myString.GetType().GetMethod("Show", new Type[] { });

     

                //Console.WriteLine (string.Format ("Is Generic Method:{0}",   myMethod .IsGenericMethod.ToString ()));

                Console.Read();

            }

     

            static void ShowTypeInfo(Type t)

            {

                Console.WriteLine(string.Format("TypeName:{0} Method List:", t.Name));

     

                foreach (MethodInfo obj in t.GetMethods())

                {

     

                    Console.WriteLine(string.Format("Method Name:{0};IsGeneric Method:{1} ;ContainsGenericParameters:{2} ",

                        obj.Name, obj.IsGenericMethod.ToString(),obj.ContainsGenericParameters.ToString()));

     

                    if (obj.GetGenericArguments().Count() > 0)

                    {

                        Console.WriteLine(string.Format("Generic Arguments 's count:{0}", obj.GetGenericArguments()[0].Name

                            ));

                    }

                }

            }

        }

     

        class myGeneric<T>

        {

         public    void Show<U>(U u)

            {

                Console.WriteLine(u.ToString());

            }

     

         public void Show(T t)

         {

             Console.WriteLine(t.ToString());

         }

        }

    }

    2.         如何通过反射找到泛型方法 Show<U>(U u) MethodInfo

  • 相关阅读:
    HotSpot VM执行引擎的实现
    解释器与JIT编译器
    执行引擎(Execution Engine)基础知识
    堆、栈、方法区的详细图解
    方法区的垃圾回收
    方法区的演进
    方法区的内部结构
    方法区内存配置
    设计模式简记-设计原则之迪米特法则
    设计模式简记-设计原则之DRY原则
  • 原文地址:https://www.cnblogs.com/hbb0b0/p/1574667.html
Copyright © 2020-2023  润新知