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”。
特性构造函数 要应用特性的方法或属性的名称。 如果该特性是成员中的任何元素(如参数、返回值或泛型参数),则此结果是与该元素关联的成员的名称。
无包含的成员(例如,程序集级别或应用于类型的特性) 可选参数的默认值。

连载目录    【已更新最新开发文章,点击查看详细】

原文地址:https://www.cnblogs.com/SavionZhang/p/11192351.html

时间: 2024-10-02 09:50:28

C#5.0新增功能02 调用方信息的相关文章

C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点

第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它包括封装.继承和多态性.C#面向对象的行为包括: 统一的类型系统 类与接口 属性.方法.事件 (2)类型安全:C#还允许通过dynamic关键字动态指定类型. 但是,C#仍然是一个主要的静态类型语言.之所以是一种强类型的语言,是因为它的类型规则是非常严格的,例如,不能够使用一个float类型的参数去调用一个解释int 类型的函数,除非显式的把float转换为int

C#3.0中的新增功能02 匿名类型

连载目录    [已更新最新开发文章,点击查看详细] 匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型. 类型名由编译器生成,并且不能在源代码级使用. 每个属性的类型由编译器推断. 可通过使用 new 运算符和对象初始值创建匿名类型. 有关对象初始值设定项的详细信息,请参阅对象和集合初始值设定项. 以下示例显示了用两个名为 Amount 和 Message 的属性进行初始化的匿名类型. var v = new { Amount = 108, Mess

CSS3新增功能02

1. CSS3中background新属性 1.1 background-size:直接设置图片的大小. 1.1.1 可以使用数值直接设置宽高. 1.1.2 cover:缩放图片,铺满盒子,图片的宽高比不变,会使图片某一部分伸出盒子范围. 1.1.3 contain:缩放图片,不会铺满盒子,图片的宽高比不变,在图片全部在盒子范围内的前提下,缩放图片直到图片的宽或者高达到盒子对应的值,会使盒子有一部分为空白. 1.2 background-origin:设置图片在盒子中开始显示的位置 1.2.1

Xcode 9.0 新增功能大全

Xcode是用于为Apple TV,Apple Watch,iPad,iPhone和Mac创建应用程序的完整开发人员工具集.Xcode开发环境采用tvOS SDK,watchOS SDK,iOS SDK和macOS SDK的形式捆绑Instruments分析工具,Simulator和OS框架. Xcode 9的亮点 Xcode 9包括整体质量改进以及广泛的新功能. 全新编辑.快速,基于结构的编辑器,可让您智能地突出显示和浏览代码.包括伟大的Markdown支持. 重构.重构内置于编辑体验之中,并

C#6.0新增功能

C# 6.0 版本包含许多可提高开发人员工作效率的功能. 此版本中的功能包括: 只读自动属性: 可以创建只能在构造函数中设置的只读自动属性. 自动属性初始值设定项: 可以编写初始化表达式来设置自动属性的初始值. Expression-bodied 函数成员: 可以使用 lambda 表达式创建单行方法. using static: 可以将单个类的所有方法导入当前命名空间. Null - 条件运算符: 可以简洁.安全地访问对象的成员,同时仍能使用 null 条件运算符检查 null. 字符串内插:

C#8.0 新增功能

连载目录    [已更新最新开发文章,点击查看详细] C#8.0提供了许多增强功能 01 Readonly 成员 可将 readonly 修饰符应用于结构的任何成员. 它指示该成员不会修改状态. 这比将 readonly 修饰符应用于 struct 声明更精细. 请考虑以下可变结构: public struct Point { public double X { get; set; } public double Y { get; set; } public double Distance =>

ServiceStack 4.0 新增功能概述 ServiceStack.Text 4.0

在某一个地方,发现了一个ServiceStack的文件上传和图片处理示例项目,这个项目的位置是:https://github.com/ServiceStackApps/Imgur,  在线演示的地址:http://imgur.servicestack.net/,   ,界面的效果如下图: 这个示例使用了新版的ServiceStack.Text 4.0. 示例项目包含的主要文件: 主要的实现代码在Global.asax中,包括入口出口类定义,服务,环境及组件的配置等. default.html,显

c# 6.0 新增功能

设置只读属性 语法如下 //设置只读的属性 public string FirstName { get; } public string LastName { get; } 只读属性只能在构造函数中设置 public Person(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } 属性初始化表达式 属性可以设置初始值 public string FirstName { get; }

cloudstack4.4新增功能前瞻

cloudstack4.4.0新功能前瞻 转载请注明地址:http://blog.csdn.net/zt689/article/details/37698989 1.   cloudstack4.4.0新增功能 cloudstack4.3.0发布已经好几个月,目前cloudstack4.4.0的开发正在忙碌的进行,估计离发布也不会久远.cloudstack4.4.0新增了许多功能.翻译不够准确的地方欢迎拍砖. 1.1   支持对root磁盘卷的存储管理 root磁盘卷的主存储插件的使用. 支持的