1. 程式人生 > >獲取實現了某介面的所有類,並返回該類中自定義的方法的方法名

獲取實現了某介面的所有類,並返回該類中自定義的方法的方法名

準備階段:

  定義介面和實現介面的類。

    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) 
        {
            
var types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.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();