我有几节课。让我们说:

public class A
{
  public void SomeAction()
  {
    Debug.Write("I was declared in class: and my name is:");
  }
}


public class B
{
  public static A myClass = new A();
}

public class C
{
  public static A myClass = new A();
}

public class D
{
  public static A myClass = new A();
}

我想让 A 类中的“SomeAction”做的是打印出它是在哪个类中初始化的。

因此,例如在另一个我称为 C.myClass.SomeAction(); 的类中,它会打印出“我在 C 类中声明,我的名字是 myClass

我希望这是有道理的。

我这样做的原因是为了在自动化测试中进行调试。我明白这不是最好的做事方式,而是业务的要求。

最佳答案

无需继承或传递对象即可满足此要求;通过检查堆栈,我们可以从构造函数体内获取调用构造函数的类的名称。

public class A
{
    private string _createdBy;

    public void SomeAction()
    {
      Console.WriteLine("I was declared in class [{0}]", _createdBy);
    }

    public A()
    {
      var stackFrame = new StackFrame(1);
      var method = stackFrame.GetMethod();
      _createdBy = method.DeclaringType.Name;
    }
}

在性能方面,我假设您没有创建这些对象的许多实例。您还可以根据您是在进行 DEBUG 构建还是在其他设置上进行预测,以便在您的生产可执行文件中完全跳过这些内容。

关于c# - c# - 如何获取初始化对象的类的名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26609892/

10-12 20:19