Использовать атрибут C # для отслеживания вызова функции, переменных и возвращаемого значения?

В Python я могу использовать декораторы для отслеживания вызова функции, ее переменных и возвращаемых значений. Он очень прост в использовании. Мне просто интересно, может ли C # сделать то же самое?

Я узнал, что в Интернете есть образец кода атрибута CallTracing. Однако он не показал того результата, которого я ожидал.

Есть ли в атрибутах C # такие же концепции, как и в декораторах Python?

Спасибо и всего наилучшего!

[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);
    }
}
5
задан casperOne 20 October 2010 в 20:44
поделиться