我在外部类中有一个嵌套类,并且从内部类中有一个嵌套类,我想在运行时通过反射来获取外部类的名称。
public abstract class OuterClass // will be extended by children
{
protected class InnerClass // will also be extended
{
public virtual void InnerMethod()
{
string nameOfOuterClassChildType = ?;
}
}
}
在C#中这可能吗?
编辑:我应该补充一点,我想使用反射并从扩展自OuterClass的子类中获取名称,这就是原因,我在编译时不知道具体类型。
最佳答案
这样的事情应该解析出外部类的名称:
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;
...这实际上是一个更好的答案。
关于c# - 从嵌套类中获取周围类的名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41228855/