我具有下面的类结构。从类B和C的构造函数中调用类A。
Class A
{
A()
}
Class B
{
B()
{
A();
}
}
Class C
{
C()
{
A();
}
}
有没有办法知道对A()的调用是来自B()还是C()? 我不想在构造函数中传递任何对象。
答案 0 :(得分:0)
您可以使用CallerMemberNameAttribute
来获取呼叫者姓名。请检查来自here的以下示例。希望这会有所帮助。
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
[System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
System.Diagnostics.Trace.WriteLine("message: " + message);
System.Diagnostics.Trace.WriteLine("member name: " + memberName);
System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}
// Sample Output:
// message: Something happened.
// member name: DoProcessing
// source file path: c:\Visual Studio Projects\CallerInfoCS\CallerInfoCS\Form1.cs
// source line number: 31
答案 1 :(得分:0)
这对我有用
var mth = new StackTrace().GetFrame(1).GetMethod();
var cls = mth.ReflectedType.Name;
答案 2 :(得分:0)
您需要 CallerMemberNameAttribute 或 CallerFilePathAttribute 。 请参阅Microsoft的文档以获取更多详细信息 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/caller-information
public class FirstClass
{
public string Run([CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "")
{
return $"CallerMemberName is {memberName}. Calling from {sourceFilePath}";
}
}
public class SecondClass
{
public string CallFirstClass()
{
var firstClass = new FirstClass();
return firstClass.Run();
}
}
CallFirstClass()中的输出将是这样
CallerMemberName is CallFirstClass. Calling from D:\Development\WpfApp1\WpfApp1\SecondClass.cs