獲取實現了某介面的所有類,並返回該類中自定義的方法的方法名
阿新 • • 發佈:2018-12-11
準備階段:
定義介面和實現介面的類。
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();