如何知道呼叫者类C#

时间:2019-03-20 05:12:57

标签: c# class

我具有下面的类结构。从类B和C的构造函数中调用类A。

Class A
{
    A()
}

Class B
{
    B()
    {
        A();
    }
}

Class C
{
    C()
    {
        A();
    }
}

有没有办法知道对A()的调用是来自B()还是C()? 我不想在构造函数中传递任何对象。

3 个答案:

答案 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
相关问题