2016-12-19 7 views
2

У меня есть вложенный класс во внешнем классе и внутри внутреннего класса я хотел бы получить имя внешнего класса через отражение во время выполнения.Получить имя окружающего класса изнутри вложенного класса

public abstract class OuterClass // will be extended by children 
{ 
    protected class InnerClass // will also be extended 
    { 
     public virtual void InnerMethod() 
     { 
      string nameOfOuterClassChildType = ?; 
     } 
    } 
} 

Возможно ли это в C#?

Редактировать: Я должен добавить, что я хочу использовать отражение и получить имя из дочернего класса, который расширяется из OuterClass, и именно по этой причине я не знаю конкретного типа во время компиляции.

+0

Как насчет только '= nameof (OuterClass);'? –

+0

Я добавил дополнительную информацию к своему сообщению. В моем конкретном случае я не знаю конкретного типа OuterClass, а дочерние классы будут ссылаться на base.InnerMethod(), чтобы вернуть некоторые базовые данные. Было бы удобно использовать отражение вместо предоставления дополнительных виртуальных методов для получения имени инкапсулирующего дочернего класса. – Xarbrough

+1

Вы должны быть конкретными. Попробуйте это: 'GetType(). DeclaringType.Name;' –

ответ

1

Нечто подобное должно разобрать имя внешнего класса:

public virtual void InnerMethod() 
{ 
    Type type = this.GetType(); 

    // type.FullName = "YourNameSpace.OuterClass+InnerClass" 

    string fullName = type.FullName; 
    int dotPos = fullName.LastIndexOf('.'); 
    int plusPos = fullName.IndexOf('+', dotPos); 
    string outerName = fullName.Substring(dotPos + 1, plusPos - dotPos - 1); 

    // outerName == "OuterClass", which I think is what you want 
} 

Или, как это было предложено @LasseVKarlsen,

string outerName = GetType().DeclaringType.Name; 

... который на самом деле является лучшим ответом.

+0

Мне нравится, что Lasses отвечает наилучшим образом. Работает хорошо и коротко. Но синтаксический анализ сборки также работает. Mabye, что может быть последним средством для некоторых особых черных магических обстоятельств. Спасибо вам обоим! – Xarbrough