我有几节课。让我们说:
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/