当前位置: 首页 > news >正文

C#扩展方法

参数列表中this的这种用法是在.NET 3.0之后新增的一种特性---扩展方法。通过这个属性可以让程序员在现有的类型上添加扩展方法(无需创建新的派生类型、重新编译或者以其他方式修改原始类型)。
扩展方法是一种特殊的静态方法,虽然是静态方法,但是可以像使用类型上的实例方法一样去使用扩展方法(调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异)。
扩展方法的第一个参数指定该方法作用于哪个类型,并且该参数以this修饰符为前缀。
当你在其他命名空间使用时,需要用using将扩展方法所在命名空间显式导入到源代码中。
扩展方法必须在非范型静态类中定义。
扩展方法无法访问扩展类型中的私有变量。
可以使用扩展方法来扩展类或接口,但不能重写扩展方法。
与接口或类方法具有相同名称和签名的扩展方法永远不会调用(这一点要牢记)。编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。换句话说,如果某个类型具有一个名为Process(int i)的方法,而你有一个具有相同签名的扩展方法,则编译器总是绑定到该实例方法。当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法。
通常建议你只在不得已的情况下才实现扩展方法,并谨慎地实现。只要有可能,必须扩展现有类型的情形都应该通过创建从现有类型派生新类型来达到这一目的。
在使用扩展方法来扩展你无法更改其源代码的类型时,你需要承受该类型实现中的更改会导致扩展方法失效的风险。
在代码中,可以使用实例方法语法调用扩展方法。但是,编译器生成的中间语言(IL)会将代码转换为对静态方法的调用。因此,并未真正违反封装原则。实际上,扩展方法无法访问他们所扩展的类型中的私有变量。

又看到一篇不错的博客:

https://www.cnblogs.com/zhaopei/p/5678842.html

http://www.lryc.cn/news/162322.html

相关文章:

  • uniapp 高度铺满全屏
  • UG\NX二次开发 判断向量在指定的公差内是否为零,判断是否是零向量 UF_VEC3_is_zero
  • 2023年MySQL实战核心技术第一篇
  • hivesql执行过程
  • C语言学习:8、深入数据类型
  • 生成树协议 STP(spanning-tree protocol)
  • 【LeetCode】312.戳气球
  • 商业数据分析概论
  • Golang GUI框架
  • LeetCode刷题笔记【24】:贪心算法专题-2(买卖股票的最佳时机II、跳跃游戏、跳跃游戏II)
  • 游戏出现卡顿有哪些因素
  • 学习Bootstrap 5的第八天
  • vue中自定义指令
  • Python:安装Flask web框架hello world
  • 小程序点击复制功能制作
  • 20230909java面经整理
  • 常用的css命名规则
  • 【Linux编程Shell自动化脚本】03 shell四剑客(find、sed、grep、awk)
  • java的springboot框架中使用logback日志框架使用RabbitHandler注解为什么获取不到消费的traceId信息?
  • 初探Vue.js及Vue-Cli
  • 大数据课程K21——Spark的SparkSQL基础语法
  • 【实践篇】Redis最强Java客户端(三)之Redisson 7种分布式锁使用指南
  • 卫星通话过后,卫星导航产业被彻底激活
  • 【算法训练-链表 七】【排序】:链表排序、链表的奇偶重排、重排链表
  • LGB的两种写法
  • 【Unity的HDRP下ShaderGraph实现权重缩放全息投影_(内附源码)】
  • 透视俄乌网络战之二:Conti勒索软件集团(上)
  • 【华为OD机试python】拔河比赛【2023 B卷|100分】
  • 05 CNN 猴子类别检测
  • 【C#】关于Array.Copy 和 GC