C# CallerMemberName,CallerFilePath,CallerLineNumber的使用

news2024/11/22 17:54:13

总目录


文章目录

  • 总目录
  • 前言
  • 一、作用
  • 二、使用
    • 1.案例
  • 三、使用场景
  • 总结


前言

本文主要介绍CallerMemberName,CallerFilePath,CallerLineNumber的使用。


一、作用

本文将介绍的三个特性作用如下:

  • CallerMemberName 允许获取方法调用方的方法或属性名称
  • CallerFilePath 允许获取包含调用方的源文件的完整路径。 这是编译时的文件路径。
  • CallerLineNumber 允许获取源文件中调用方法的行号。

在这里插入图片描述

二、使用

1.案例

借用微软文档中的案例,代码如下(示例):

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
    System.Diagnostics.Trace.WriteLine("message: " + message);
    System.Diagnostics.Trace.WriteLine("member name: " + memberName);
    System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
    System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}

// Sample Output:
//  message: Something happened.
//  member name: DoProcessing
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
//  source line number: 31

由以上案例以及案例输出结果我们需要知道以下几点:

  • CallerMemberName,CallerFilePath,CallerFilePath三个特性修饰的参数,必须指定默认值,如 [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
  • 通过以上三个特性修饰后的参数,会将特性功能中的获取的数据存进参数内,以供外界使用

三、使用场景

  • 可用于错误日志的记录,使用以上特性可以定位到具体的调用方以及代码行
  • 可用于实现 INotifyPropertyChanged 接口,通过CallerMemberName可以让接口的实现更加简洁,如下所示:
    public class PropertyChangedBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged([CallerMemberName]string propertyName=null)
        {
            PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
        }
    }


总结

以上就是今天要介绍的内容,希望以上内容可以帮助到你,如文中有不对之处,还请批评指正。


参考文档:
CallerMemberNameAttribute 类
CallerFilePathAttribute 类
CallerLineNumberAttribute 类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于STM32与PCA9685制作四足机器人(代码开源)

前言:本文为手把手教学基于STM32的四足机器人项目——JDY-31蓝牙控制,特别地,本次项目采用的是STM32作为MCU。四足机器人的支架为3D打印件,SG90舵机驱动机器人实现姿态运动。借助PCA9685舵机驱动板实现12路PWM波控制,更…

基于java+springboot+mybatis+vue+mysql的留守儿童爱心网站

项目介绍 随着留守儿童爱心管理的不断发展,留守儿童爱心网站在现实生活中的使用和普及,留守儿童爱心管理成为近年内出现的一个热门话题,并且能够成为大众广为认可和接受的行为和选择。设计留守儿童爱心网站的目的就是借助计算机让复杂的管理…

[附源码]Node.js计算机毕业设计二手图书回收销售网站Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

程序调试:日常经验总结(一)

程序调试:日常经验总结一:如何快速的去查询一个类甚至是一个jar包中的class文件?二:如何快速找到本地项目编译之后的字节码文件三:本地启动小实例绑定同一个端口时候发生的报错。一:如何快速的去查询一个类…

[附源码]Python计算机毕业设计防疫卫生资讯推荐系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

taro 兼容支付宝小程序和微信小程序<九>---判断是否是开发者工具/开发版/体验版/正式版/测试环境/正式环境

项目: taro3 vue3 判断是支付宝/微信/H5 支付宝 -> process.env.TARO_ENV ‘alipay’ 微信 -> process.env.TARO_ENV ‘weapp’ H5 -> process.env.TARO_ENV ‘h5’ 判断是否是开发者工具 支付宝 -> my.isIDE 微信 -> Taro.getSystemInfoSyn…

[附源码]Python计算机毕业设计-高校科研信息管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

求最小生成树Prim(普里姆)和Kruskal(克鲁斯卡尔)算法

想求最小生成树,我们首先得弄懂以下几个概念 连通图:图中任意两个顶点都是连通的 极小连通子图:既要保持图连通又要使得边数最少的子图 生成树: 包含图中全部顶点的一个极小连通子图 连通图用通俗的话来讲就是,某一个顶点,可以直接或者间接…

学习 Shell准没错

什么是shell? 目前的计算机操作系统都采用了某型形式的用户界面,借此指定系统需要操作系统的命令。但是在很多操作系统中,命令行界面是内嵌的,是人与计算机交互的唯一方式。操作系统的命令行页面就是为了执行您的命令。 shell是…

可视化分割体积seg.nrrd(切片为例)

目录 步骤 拓展:CT值/HU值 步骤 不能直接可视化的原因: seg.nrrd保存的是标签类别值,如下图标签类别值是[1,6],没有标记的部分值为0 1.将seg.nrrd保存为nrrd格式,并读取 2.将数组*int(255/标签类别数…

物流行业对接BMW EDI项目案例分析

宝马集团的悠久历史始于1916年,总部位于德国慕尼黑。是德国最成功的汽车和摩托车制造商之一,也是德国规模最大的制造工业公司之一。 项目背景 物流行业C公司作为BMW的承运商,需要将物流信息与BMW通过EDI进行对接。C公司接收BMW发送过来的IF…

【Web安全】认证与会话管理

目录 1. 认证与授权 2. 密码 3. 多因素认证 4. Session与认证 5. Session Fixation攻击 6. Session 保持攻击 7. 单点登录SSO 1. 认证与授权 认证的目的是为了认出用户是谁,而授权的目的是为了决定用户能够做什么。 认证实际上是一个验证凭证的过程。 …

通达信交易接口代码的执行过程分享

股票软件一般都提供了接口,可以参考里面的公式,编写自己的公式,这样就可以得到相应的数据了。无论使用哪种语言,建议先了解文档,然后再阅读各编程语言的用户手册。 通达信交易接口代码的执行过程分享: //…

非零基础自学Golang 第7章 函数 7.4 可变参数

非零基础自学Golang 文章目录非零基础自学Golang第7章 函数7.4 可变参数7.4.1 可变参数函数的使用7.4.2 可变参数与内置函数7.4.3 可变参数的传递第7章 函数 7.4 可变参数 Go语言支持可变参数的特性,即函数声明时可以没有固定数量的参数。 可变参数的函数格式如下…

相关分析和回归分析

相关与回归分析就是了解变量之间相关关系的统计方法 一.相关分析 具有相关关系的变量之间,如果不区分原因和结果,我们称之为相关分析 相关分析是看两个因素之间的相关性,不需要确定哪个是自变量,哪个是因变量,两个因…

CAS:2236573-39-8|水溶CY7-amine|花菁染料CY7标记氨基

CAS:2236573-39-8|水溶CY7-amine|花菁染料CY7标记氨基 中文名:氰基Cy5-氨基 CAS:1650635-41-8 分子式:C43H60Cl2N4O 分子量:719.87 外观:绿色粉末 纯度:≥95% 保存条件 :避光,干燥&#…

【linux】容器

一、虚拟化分类 虚拟化资源提供者 硬件平台虚拟化操作系统虚拟化 虚拟化实现方式 Type I 半虚拟化Type II 硬件辅助全虚拟化Type III 软件全虚拟化操作系统虚拟化 回顾硬件平台虚拟化与操作系统虚拟化区别 主机虚拟化与容器虚拟化的优缺点 主机虚拟化 应用程序运行环境强隔…

Java+Servlet电商购物系统(含源码+论文+答辩PPT等)

项目功能简介: 本项目含代码详细讲解视频,手把手带同学们敲代码从0到1完成项目 该项目采用技术MyBatis、Tomcat服务器、MySQL数据库 项目含有源码、配套开发软件、软件安装教程、项目发布教程。 项目涉及的技术: 1、前端:JSP、css、Javascrip…

Java类型转换

java是一门强类型语言,当不同类型之间的变量相互赋值时,会有严格的校验。当类型不一致时,就会发生类型的转换。java中类型转换分为两类:自动类型转换和强制类型转换。 造型(casting)的含义是把一种类型的值赋给另一种类型的变量。…

可视化项目管理,项目进度管理必备工具

一个项目能不能成功,其实在开始时就决定了,计划是否完善,任务是否明确决定着项目能否顺利进行。 同时,在项目进行过程中,也要监控项目的进度以确保每项工作都能按进度进行,必须不断掌握计划的实施情况。 …