2016-12-20 60 views
5

Załóżmy mam klasę dominującą i klasę dziecka:Uzyskiwanie nazwy deklarowanej klasy?

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

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

Jako prądu, zarówno GetParentName() i GetChildName() powróci Dziecko.

Jednak w moim scenariuszu chciałbym uzyskać nazwę klasy, w której deklarowana jest metoda.

Zatem GetChildName() powinna powrócić dziecko ale GetParentName() powinna powrócić Parent.

Czy jest to możliwe?

. UWAGA:

Rozumiem, że mogę używać GetType() BaseType.Name ale nie będzie działać, ponieważ hierarchia może być skomplikowane.

+0

'Chciałbym uzyskać nazwę klasy, w którym metoda jest declared' to znaczy, że są dwie różne metody,' GetChildName' * jest * zadeklarowane u dziecka – Jonesopolis

+2

Możliwy duplikat [Jak uzyskać nazwę i typ metody wywołującej za pomocą odbicia?] (http://stackoverflow.com/questions/3095696/how-do-i-get-the-calling- nazwa-metody-i-typ-użycie-odbicie) – MethodMan

+2

Można po prostu zwrócić "nadrzędny". Daj nam przykład, w którym nie ma sensu zwracanie trumny. – Winter

Odpowiedz

6

chcesz tego, myślę:

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

Możesz także użyć tego, jeśli chcesz uzyskać typ deklaracji skądś poza daną funkcją: typeof (Child) .GetMembers(). First (m => m.Name == "GetParentName") .DeclaringType.Name –

+0

To było dokładnie to, czego potrzebowałem - dzięki! –