如何获取初始化对象的类的名称c#

Fes*_*lly 2 c# class inner-classes

我有几节课.让我们说:

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

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();
}
Run Code Online (Sandbox Code Playgroud)

我希望A类中的"SomeAction"能够打印出它初始化的类.

因此,例如在另一个我调用C.myClass.SomeAction();它的类中会打印出"我在课堂上宣布C我的名字是myClass"

我希望这是有道理的.

我这样做的原因是在自动化测试中进行调试.我理解这不是最好的做事方式,而是对业务的要求.

Jay*_*Jay 7

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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