Verwenden Sie das C # -Attribut, um den Funktionsaufruf, die Variablen und den Rückgabewert zu verfolgen?

n Python kann ich Dekoratoren verwenden, um den Funktionsaufruf, seine Variablen und Rückgabewerte zu verfolgen. Es ist sehr einfach zu bedienen. Ich frage mich nur, ob C # dasselbe kann.

Ich finde heraus, dass ein Beispielcode für CallTracing Attribute online ist. Das erwartete Ergebnis wurde jedoch nicht angezeigt.

Haben C # -Attribute ähnliche Konzepte wie der Python-Dekorator?

Danke und beste Grüße!

[AttributeUsage(AttributeTargets.Method | AttributeTargets.ReturnValue |
    AttributeTargets.Property, AllowMultiple = false)]
public class CallTracingAttribute : Attribute
{
    public CallTracingAttribute()
    {

        try
        {
            StackTrace stackTrace = new StackTrace();
            StackFrame stackFrame = stackTrace.GetFrame(1);                

            Trace.TraceInformation("{0}->{1} {2}:{3}",
                stackFrame.GetMethod().ReflectedType.Name,
                stackFrame.GetMethod().Name,
                stackFrame.GetFileName(),
                stackFrame.GetFileLineNumber());

            Debug.WriteLine(string.Format("{0}->{1} {2}:{3}",
                stackFrame.GetMethod().ReflectedType.Name,
                stackFrame.GetMethod().Name,
                stackFrame.GetFileName(),
                stackFrame.GetFileLineNumber()));
        }
        catch
        {
        }
    }
}

class Program
{
    [CallTracing]
    static int Test(int a)
    {
        return 0;
    }

    [CallTracing]
    static void Main(string[] args)
    {
        Test(1);
    }
}

Antworten auf die Frage(6)

Ihre Antwort auf die Frage