gpt4 book ai didi

c# - 使用 C# 属性跟踪函数调用、变量和返回值?

转载 作者:太空狗 更新时间:2023-10-29 22:55:26 30 4
gpt4 key购买 nike

在 Python 中,我可以使用装饰器来跟踪函数调用、它的变量和返回值。这是非常容易使用。我只是想知道 C# 可以做同样的事情吗?

我在网上找到了CallTracing Attribute的示例代码。然而,它并没有显示出我预期的结果。

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

最佳答案

.NET 确实支持调用拦截架构,如果您愿意遵守某些约束(即从 ContextBoundObject 派生,等等)。您可以在 MSDN magazine artcile titled "Decouple Components by Injecting Custom Services into Your Object's Interception Chain". 中找到有关如何执行此操作的完整说明。

此外,您可能需要考虑将类抽象为接口(interface),然后通过接口(interface)实现转发它们来拦截调用。

最后,看看WCF。它有一个定义明确的拦截架构(不要被它是 Web 服务的事实所蒙蔽,您可以简单地创建自己的 channel 传输,这是一个空 channel ),您可以利用它来做您想要的。

关于c# - 使用 C# 属性跟踪函数调用、变量和返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3981440/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com