当前位置: 首页 > 编程语言 > C#

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

时间:2023-04-10 18:49:44 C#

使用C#属性跟踪函数调用、变量和返回值?在Python中,我可以使用装饰器来跟踪函数调用、它的变量和返回值。这是非常容易使用。我只是想知道C#可以做同样的事情吗?我在网上找到了CallTracing属性的示例代码。但是,它没有显示我预期的结果。C#属性与python的装饰器有相似的概念吗?感谢你并致以真诚的问候![AttributeUsage(AttributeTargets.Method|AttributeTargets.ReturnValue|AttributeTargets.Property,AllowMultiple=false)]publicclassCallTracingAttribute:Attribute{publicCallTracingAttribute(){尝试{StackTracestackTrace=newStackTrace();StackFramestackFrame=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{}}}classProgram{[CallTracing]staticintTest(inta){return0;}[CallTracing]staticvoidMain(string[]args){测试(1);如果您愿意传递某些约束(即从ContextBoundObject派生,等等),.NET确实支持调用拦截体系结构。您可以在标题为“通过将自定义服务注入对象的拦截链来解耦组件”的MSDN杂志文章中找到有关如何执行此操作的完整描述。此外,您可能需要考虑将类抽象为接口,然后通过接口实现转发它们来拦截调用。最后看看WCF。它有一个非常清晰的拦截架构(不要让它的Web服务欺骗你,你可以简单地创建你自己的通道传输,这是一个空通道),你可以利用它来完成你想要的。C#不支持开箱即用的AOP。您需要像PostSharp这样的IL重写器。您可以使用RuntimeFlow工具(由我开发)跟踪所有.NET函数调用、参数和返回值,而无需手动添加装饰器。以上就是C#学习教程:使用C#属性跟踪函数调用、变量和返回值?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: