2016-12-19 6 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から拡張する子クラスから名前を取得する必要があることを追加する必要があります。これは、コンパイル時に具体的な型がわからないためです。 @LasseVKarlsenが提案されているように、実際に良い答えです

string outerName = GetType().DeclaringType.Name; 

を...

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 
} 

または:このような

+0

'= nameof(OuterClass);'はどうでしょうか? –

+0

私のポストにいくつかの情報を追加しました。私の具体的なケースでは、OuterClassの具体的な型がわからず、子クラスはbase.InnerMethod()を呼び出して基本データを取得します。カプセル化子クラスの名前を取得するための追加の仮想メソッドを提供する代わりに、リフレクションを使用すると便利です。 – Xarbrough

+1

あなたは具体的でなければなりません。これを試してください: 'GetType()。DeclaringType.Name;' –

答えて

1

何かが外部クラスの名前を解析する必要があります。

+0

私はLassesがベストに答えるのが好きです。うまく動作し、短いです。しかし、アセンブリの解析もうまくいくようです。特別な黒い魔法の状況の最後の手段となりうるマベイ。両方のおかげで! – Xarbrough

関連する問題