C#5.0新增功能02 调用方信息
通过使用调用方信息特性,可获取有关方法的调用方的信息。 可以获取源代码的文件路径、源代码中的行号和调用方的成员名称。 此信息有助于跟踪、调试和创建诊断工具。若要获取此信息,可以使用应用于可选参数的特性,每个特性都具有默认值。 下表列出在 System.Runtime.CompilerServices 命名空间中定义的调用方信息特性:
特性 | 描述 | 类型 |
---|---|---|
CallerFilePathAttribute | 包含调用方的源文件的完整路径。 这是编译时的文件路径。 | String |
CallerLineNumberAttribute | 源文件中调用方法的行号。 | Integer |
CallerMemberNameAttribute | 调用方的方法或属性名称。 请参阅本主题后面的成员名称。 | String |
示例
下面的示例演示如何使用调用方信息特性。 每次调用 TraceMessage
方法时,调用方信息将替换为可选参数的变量。
1 public void DoProcessing() 2 { 3 TraceMessage("Something happened."); 4 } 5 6 public void TraceMessage(string message, 7 [System.Runtime.CompilerServices.CallerMemberName] string memberName = "", 8 [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "", 9 [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0) 10 { 11 System.Diagnostics.Trace.WriteLine("message: " + message); 12 System.Diagnostics.Trace.WriteLine("member name: " + memberName); 13 System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath); 14 System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber); 15 } 16 17 // 输出结果: 18 // message: Something happened. 19 // member name: DoProcessing 20 // source file path: c:\Visual Studio Projects\CallerInfoCS\CallerInfoCS\Form1.cs 21 // source line number: 31
备注
你必须为每个可选参数指定显式默认值。 不能将调用方信息特性应用于未指定为可选的参数。
调用方信息特性不会使参数成为可选参数。 相反,它们会在忽略此参数时影响传入的默认值。
在编译时,调用方信息值将作为文本传入中间语言 (IL)。 与异常的 StackTrace 属性的结果不同,这些结果不受模糊处理的影响。
你可显式提供可选参数来控制调用方信息或隐藏调用方信息。
成员名称
可以使用 CallerMemberName
特性来避免将成员名称指定为所调用的方法的 String
参数。 通过使用这种技术,可以避免“重命名重构”不更改 String
值的问题。 此好处对于以下任务特别有用:
-
使用跟踪和诊断例程。
-
在绑定数据时实现 INotifyPropertyChanged 接口。 此接口允许对象的属性通知绑定控件该属性已更改,以便此控件能够显示更新的信息。 如果没有
CallerMemberName
特性,则必须将属性名称指定为文本。
以下图表显示在使用 CallerMemberName
特性时返回的成员名称。
调用发生中 | 成员名称结果 |
---|---|
方法、属性或事件 | 从中发起调用的方法、属性或事件的名称。 |
构造函数 | 字符串“.ctor” |
静态构造函数 | 字符串“.cctor” |
析构函数 | 字符串“Finalize” |
用户定义的运算符或转换 | 为成员生成的名称,例如,“op_Addition”。 |
特性构造函数 | 要应用特性的方法或属性的名称。 如果该特性是成员中的任何元素(如参数、返回值或泛型参数),则此结果是与该元素关联的成员的名称。 |
无包含的成员(例如,程序集级别或应用于类型的特性) | 可选参数的默认值。 |
成在管理,败在经验;嬴在选择,输在不学! 贵在坚持!
个人作品
BIMFace.SDK.NET
开源地址:https://gitee.com/NAlps/BIMFace.SDK
系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html
技术栈
1、Visual Studio、.NET Core/.NET、MVC、Web API、RESTful API、gRPC、SignalR、Java、Python
2、jQuery、Vue.js、Bootstrap、ElementUI
3、数据库:分库分表、读写分离、SQLServer、MySQL、PostgreSQL、Redis、MongoDB、ElasticSearch、达梦DM
4、架构:DDD、ABP、SpringBoot、jFinal
5、环境:跨平台、Windows、Linux、Nginx
6、移动App:Android、IOS、HarmonyOS、微信小程序、钉钉、uni-app、MAUI
分布式、高并发、云原生、微服务、Docker、CI/CD、DevOps、K8S;Dapr、RabbitMQ、Kafka、RPC、Elasticsearch。
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
出处:www.cnblogs.com/SavionZhang
作者:张传宁 技术顾问、培训讲师、微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
专注于企业级通用开发平台、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
熟悉中小企业软件开发过程:可行调研、需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业实现互联网转型升级全流程解决方案。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。
如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!