【问题标题】:Get name of surrounding class from within nested class从嵌套类中获取周围类的名称
【发布时间】:2016-12-19 18:34:09
【问题描述】:

我在外部类中有一个嵌套类,我想在运行时通过反射从内部类中获取外部类的名称。

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

这在 c# 中可行吗?

编辑:我应该补充一点,我想使用反射并从从 OuterClass 扩展的子类中获取名称,这就是原因,我在编译时不知道具体类型。

【问题讨论】:

  • = nameof(OuterClass); 怎么样?
  • 我在帖子中添加了更多信息。在我的具体情况下,我不知道 OuterClass 的具体类型,子类将调用 base.InnerMethod() 来获取一些基本数据。使用反射而不是提供额外的虚拟方法来获取封装子类的名称会很方便。
  • 您必须具体。试试这个:GetType().DeclaringType.Name;

标签: c# .net-2.0


【解决方案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;

...这实际上是一个更好的答案。

【讨论】:

  • 我最喜欢 Lasses 的回答。工作正常而且很短。但是解析程序集似乎也有效。对于某些特殊的黑魔法情况,Mabye 可能是最后的手段。谢谢你们!
猜你喜欢
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
相关资源
最近更新 更多