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);
}
}