2016-12-20 4 views
5

Angenommen, bekam ich eine Elternklasse und ein Kind Klasse:Den Namen der deklarierenden Klasse erhalten?

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

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

Ab Strom, beide GetParentName() und GetChildName()Kind zurück.

In meinem Szenario möchte ich jedoch den Namen der Klasse abrufen, in der die Methode deklariert ist.

So GetChildName() sollte Kind aber GetParentName() returnEltern zurückkehren.

Ist dies auf jeden Fall möglich?

. HINWEIS:

Ich verstehe, dass ich GetType() BaseType.Name aber wird nicht funktionieren, da die Hierarchie komplex sein könnte nutzen könnte.

+0

'Ich möchte den Namen der Klasse erhalten, in dem das Verfahren ist declared' Ich meine, sie sind zwei verschiedene Methoden,' GetChildName' * ist im Kind deklariert – Jonesopolis

+2

Mögliche Duplikate von [Wie bekomme ich den Namen der aufrufenden Methode und geben Sie mit Reflektion?] (http://StackOverflow.com/questions/3095696/how-do-i-get-the-calling- method-name-and-type-using-reflection) – MethodMan

+2

Sie könnten einfach "Eltern" zurückgeben. Geben Sie uns ein Beispiel, wo die Rückgabe einer Zeichenfolge litteral nicht angemessen ist. – Winter

Antwort

6

du wollen, denke ich:

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

Sie können dies auch verwenden, wenn Sie den Deklarationstyp von einer Stelle außerhalb der betreffenden Funktion erhalten möchten: typeof (Kind) .GetMembers(). Zuerst (m => m.Name == "GetParentName") .DeclaringType.Name –

+0

Das war genau was ich brauchte - danke! –

Verwandte Themen