【Azure Developer】C#/.NET 静态函数中this关键字的作用

news/2024/11/16 8:37:30/文章来源:https://www.cnblogs.com/lulight/p/18306029

问题描述

在查看.NET代码的时候,发现一个静态方法,第一个参数使用 this 关键字,它在这里是什么作用呢?

    public static XElement AquireElement(this XContainer container,string name, bool addFirst = false){
...

 

问题解答

通过查看微软的官方博文介绍(https://asp-blogs.azurewebsites.net/scottgu/new-orcas-language-feature-extension-methods), 这是C#的功能:扩展方法。

扩展方法允许开发人员向现有 CLR 类型的公共协定添加新方法,而无需对其进行子类化或重新编译原始类型。  

扩展方法有助于将当今动态语言中流行的“鸭子类型”支持的灵活性与强类型语言的性能和编译时验证相结合。

利用新的扩展方法功能向各个类型添加方法,为开发人员提供了许多有用的可扩展性场景。  然而,扩展方法真正强大的原因在于它们不仅能够应用于单个类型,而且还能够应用于 .NET中的任何父基类或接口。 

这使得开发人员能够构建各种丰富的、可组合的框架扩展,这些扩展可以在 .NET 中使用。

例如:

public static int Foo(this MyClass arg)

就可以用

MyClass myClass = new MyClass();
int i = myClass.Foo();

代替传统的写法

MyClass myClass = new MyClass();
int i = Foo(myClass);

如果MyClass类是同一个项目里面的类,那么此方法优势不明显。 但是如果 MyClass类是由其它第三方开发,然后只是在自己的项目中引用。

那么,扩展方法(this)就非常强大。

 

本文中遇见的就是对System.Xml.Linq基类中的XContainer对象进行了扩展。添加了获取一个指定元素的扩展方法AquireElement,如元素不存在,则创建。

    public static class XmlLinqExtensions{public static XElement AquireElement(this XContainer container,string name, bool addFirst = false){var element = container.Element(name);if (null != element){return element;}element = new XElement(name);if (addFirst){container.AddFirst(element);}else{container.Add(element);}return element;}}

使用时

//XDocument document; var configElement = document.AquireElement("configuration", addFirst: true);
var configSections = configElement.AquireElement("configSections", addFirst: true);

 

PS: 原生类中并没有包含AquireElement方法。

 

参考资料

Extension Methods :https://asp-blogs.azurewebsites.net/scottgu/new-orcas-language-feature-extension-methods

Use of "this" keyword in formal parameters for static methods in C# : https://stackoverflow.com/questions/846766/use-of-this-keyword-in-formal-parameters-for-static-methods-in-c-sharp

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定点数的编码表示

真值和机器数 在日常生活中,形如“+15”、“-3”这样带正负号的数字叫做真值,而用0表示“正”,1表示“负”这样把符号数字化的数称为机器数,常用的有原码、补码和反码表示法,真值是机器数所代表的实际值 原码、补码、反码、移码原码表示的优点:与真值的对应关系简单、直观,…

字节码指令

加载与存储指令public int add(int a, int b) {int res = a + b;return res; }字节码指令public int add(int, int);descriptor: (II)Iflags: (0x0001) ACC_PUBLICCode:stack=2, locals=4, args_size=30: iload_11: iload_22: iadd3: istore_34: iload_35: ireturn1. 将局部变量…

idea 创建springboot项目

参考—— https://blog.csdn.net/Alger_/article/details/128749131——————————需要联网创建————创建项目 new project——》Spring initializr next springboot的版本与jdk版本有关 2.x :jdk8 3.x :jdk17 只选择web 下的spring web ——》create 项目需要联网下…

[智能网联汽车] CAN Log 文件 - ASC文件格式 [转]

因工作研究需要,担心精华内容丢失。故全文转载,转载自:图文详解CAN Log文件 - ASC文件格式 - CSDNVector提供了两种记录数据格式的格式规范:BLF和ASC。在Vector提供的CAN_LOG_TRIGGER_ASC_Format.pdf文件中,规定了CANoe/CANalyzer ASC记录中CAN、Log和Trigger event的格式…

第八天笔记(项目测试工具悟道使用)

禅道 一、禅道的介绍 (1)定义禅道是一个项目管理工具,也是一个bug管理工具,还是一个用例管理工具。 (2)作用:为了解决众多企业在管理中出现混乱,无序的现象,开发出来 (3)来源:禅道属易软天川公司 (4 )禅道是集于产品管理,项目管理,测试管理于一身,同时包含事务…

阿贝云永久免费云服务器1核1G5M服务器使用评测

最近关注到了阿贝云,申请了一台,做个评测,供大家参考使用。永久免费服务器规格(CPU1核,内存1G,公网带宽5M,SSD数据盘10G),网络还是防御 200G 的高防 BGP,还提供了两个快照服务,作为免费服务器来说还是非常不错的。 使用 i-abc/Speedtest 三网测速 大陆三网+教育网 I…

2024QBXT暑假j组精英营Day2

\(一\) \(数据结构\) \(1\) \(链表\) \(1.0\) \(介绍\) 链表分为单向链表和双向链表 单向链表即当前链表只指向下一个元素 双向链表即对于每个元素,记录其前面一个元素,也记录其后面一个元 素。 链表不建议使用 STL 的某些元素进行替代,手写链表更为方便。 \(1.1\) \(单向链…

抢红包设计(预分配法)

大致设计常见软件QPSNginx 单机理论能达到30w左右的QPSRedis 单机可以承受8W+的QPS,理论可以达到10wQPSMysql 单机只有4k左右的QPS创建红包 红包拆分算法二倍均值法(每个人获得的红包金额差不多)math.Max(0.01, money / member * 2) 假设有10个人,红包总额10元。 10…

揭秘 Java 变长参数:如何优雅地处理不定数量的字符串

哈喽,大家好,我是木头左!理解变长参数:基础概念 在Java中,变长参数也称为可变参数,它允许你传递任意数量的参数到一个方法中。这个特性是通过使用三个点符号...来实现的。当你在方法的参数列表中使用...时,任何传递给该方法的额外参数都会被当作数组来处理。这为提供了一…

记一道弱智题

P2033 Chessboard Dance 今天集训第四天,遇到这道模拟题。 我搞错了一大问题。首先我以为移动是整行移动,但显然不是的。于是我就开始想这个怎么处理:我想是先碰到之后让箱子作为P,继续往后推,再碰到箱子……最后回溯。这是可怕的递归,函数是 MOVE(x, y, Steps_rem)。奈何…

【THM】Pickle Rick练习

脚本小子是这样的,黑客只要写POC就可以,可是脚本小子要考虑的事情就多了。【THM】Pickle Rick练习 与本文相关的TryHackMe实验房间链接:TryHackMe | Room details 简介:瑞克和莫蒂 CTF。 帮助瑞克变回人类!这个以瑞克和莫蒂为主题的挑战要求你利用网络服务器,找到三种材料…

乒乓球比赛计分系统需求流程

计应222_杜晓瑾_2210502012 乒乓球比赛计分系统需求流程 1、产品愿景: 我们的产品乒乓球比赛计分系统是为了解决乒乓球运动员、裁判、教练、爱好者、普通用户等人的问题,他们可以使用乒乓球计分器软件,在登录后可随时查看以往记录,进行对比,但是现有的计分器不能达到他们的…