2010-11-10 104 views
2

在下面的代碼:在C#中從父類反射檢索子類

using System; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyChild x = new MyChild(); 
      System.Console.ReadKey(); 
     } 
    } 

    class MyParent 
    { 
     protected static void TestFunction() 
     { 
      System.Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     } 
    } 

    class MyChild : MyParent 
    { 
     public MyChild() 
     { 
      TestFunction(); 
     } 
    } 
} 

我要輸出「ConsoleApplication1.MyChild」靜態方法,因爲這是呼叫類型。這可能嗎?我在反射物體的任何地方都找不到它。

回答

2

你不能用靜態方法做到這一點,因爲你不是真的MyChild的實例上調用它。它永遠只會被呼叫MyParent

注意,這可能不會,即使你做的方法非靜態什麼類型聲明正在執行的方法,這實際上是父類的工作,因爲你問(子類未聲明該方法,它只是繼承它)。

但是,如果你做的方法非靜態,你將有機會獲得GetType()實例方法,它會回報給你正是你想要的類型。