私は外部クラス内に入れ子クラスを持ち、内部クラスからは実行時に外部クラスの名前を取得したいと思います。ネストされたクラスの中から周囲のクラスの名前を取得
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
}
または:このような
'= nameof(OuterClass);'はどうでしょうか? –
私のポストにいくつかの情報を追加しました。私の具体的なケースでは、OuterClassの具体的な型がわからず、子クラスはbase.InnerMethod()を呼び出して基本データを取得します。カプセル化子クラスの名前を取得するための追加の仮想メソッドを提供する代わりに、リフレクションを使用すると便利です。 – Xarbrough
あなたは具体的でなければなりません。これを試してください: 'GetType()。DeclaringType.Name;' –