2016-12-20 1 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' * is * объявлено в дочернем элементе – Jonesopolis

+2

Возможный дубликат [Как получить имя и тип вызывающего метода с использованием отражения?] (http://stackoverflow.com/questions/3095696/how-do-get-the-calling- method-name-and-type-using-reflection) – MethodMan

+2

Вы можете просто вернуть «Родитель». Дайте нам пример, когда возвращение строки litteral не подходит. – Winter

ответ

6

Вы хотите этого, я думаю:

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

Вы также можете использовать это, если хотите получить тип объявления где-то вне данной функции: typeof (Child) .GetMembers(). First (m => m.Name == "GetParentName") .DeclaringType.Name –

+0

Это было именно то, что мне нужно - спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^