zoukankan      html  css  js  c++  java
  • 获取实现了某接口的所有类,并返回该类中自定义的方法的方法名

    准备阶段:

      定义接口和实现接口的类。

        interface IMyInterface
        {
            void Write();
        }
    
        /// <summary>
        /// 实现类1
        /// </summary>
        public class MyTest1 : IMyInterface
        {
            public MyTest1()
            {
                var methodNames = GetType().GetMethods().Select(m => m.Name).ToList();
            }
    
            public void Write()
            {
                Console.WriteLine("这里是测试类 1");
            }
        }
    
        /// <summary>
        /// 实现类2
        /// </summary>
        public class MyTest2 : IMyInterface
        {
            public void Write()
            {
                Console.WriteLine("这里是测试类 2");
            }
    
            public void MyMethod2()
            {
                Console.WriteLine("这里是测试类2 的第2个方法");
            }
        }

    定义执行方法(最后是调用)

            /// <summary>
            /// 获取实现了某接口的类
            /// </summary>
            /// <param name="iType"></param>
            public static void GetClasses(Type iType) 
            {

            Assembly asm = Assembly.GetExecutingAssembly(); //当前程序集
            var types = asm.GetTypes().Where(t => t.GetInterfaces().Contains(iType)).ToList();

           foreach(var t in types)
                {
                    Console.WriteLine(t.FullName);
                    Type tt = Type.GetType(t.FullName);
                    IMyInterface my = Activator.CreateInstance(tt) as IMyInterface;  //这里不应该把接口直接写进来的
                    my.Write();
    
                    var methodNames = tt.GetMethods().Select(m => m.Name).ToList();
                    Console.WriteLine("该类具有的方法名:");
                    List<string> oriNames = new List<string> { "ToString", "Equals", "GetHashCode", "GetType" };
                    methodNames = methodNames.Except(oriNames).ToList();
    
                    //但问题是你不知道方法名对应的功能是什么啊!!!
                    foreach (var name in methodNames)
                    {
                        Console.WriteLine("  " + name);
                    }
                    Console.WriteLine();
                }
            }

    调用:

                GetClasses(typeof(IMyInterface));
                Console.ReadKey();
  • 相关阅读:
    随机小错2_0527
    随计小错
    C++实现读写文件
    03-树2 List Leaves (25 分)
    获取毫秒级的时间戳
    new对象时,类名后加括号与不加括号的区别
    FoxMail 7.2的邮件存储目录修改
    C/C++ 开源算法库
    VS2015的安装
    脏内存导致BUG的问题
  • 原文地址:https://www.cnblogs.com/zhangchaoran/p/10103032.html
Copyright © 2011-2022 走看看