2016-12-20 106 views
5

假設我有一個父類和子類:獲取聲明類的名稱?

public abstract class Parent 
{ 
    public string GetParentName() 
    { 
     return GetType().Name; 
    } 
} 

public class Child : Parent 
{ 
    public string GetChildName() 
    { 
     return GetType().Name; 
    } 
} 

截至目前,雙方GetParentName()GetChildName()將返回兒童

但是,在我的場景中,我想獲取聲明該方法的類的名稱。

因此GetChildName()應該返回兒童GetParentName()應該返回家長

這是無論如何可能嗎?

注:

我明白,我可以用gettype()BaseType.Name但這 不會起作用,因爲層次結構可能是複雜的。

+0

'我想獲得的類的名稱,其中的方法是declared'我的意思是他們是兩種不同的方法,'GetChildName' *是否在子節點中聲明 – Jonesopolis

+2

[我如何獲得調用方法名稱和類型使用反射?](http://stackoverflow.com/questions/3095696/how-do-i-get-the-calling-方法名稱和類型使用反射) – MethodMan

+2

您可以簡單地返回「父」。給我們一個例子,說明返回一串字符串是不合適的。 – Winter

回答

6

你要這個,我覺得:

return MethodBase.GetCurrentMethod().DeclaringType.Name; 
+0

如果您希望能夠從有問題的函數之外的某個位置獲取聲明類型,則還可以使用此類型: typeof(Child).GetMembers()。First(m => m.Name ==「GetParentName」 ).DeclaringType.Name –

+0

這正是我需要的 - 謝謝! –