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

.NET 10 amp;amp; C# 14 New Features 新增功能介绍-扩展成员Extension Members

C# 14 引入了对扩展成员(Extension Members)的增强支持,本质上是对传统“扩展方法”模型的一次语言级升级,使其可以定义的不再仅限于方法,

而是可以扩展更多成员形态(例如属性、运算符等)。

一、从扩展方法到扩展成员

早在C# 3.0中,就引入了“扩展方法(Extension Methods)”,其底层机制是:

  • 必须定义在 static class

  • 方法必须是static

  • 第一个参数使用this T

publicstaticclassStringExtensions {publicstaticboolIsNullOrEmptyEx(thisstringvalue)=>string.IsNullOrEmpty(value); }

从本质上看:

编译器在语法层面做“糖化处理”,最终仍然是静态方法调用。

LINQ就是最大的应用场景。

二、C# 14中引入扩展成员和示例说明

C# 14 允许在更自然的语法结构中声明扩展成员,不再局限于“静态类 + this 参数”模式,而是支持类似:

publicstaticclassEnumerable {//Extension blockextension<TSource>(IEnumerable<TSource> source)//extension members for IEnumerable<TSource>{//Extension property:publicboolIsEmpty => !source.Any();//Extension method:publicIEnumerable<TSource> Where(Func<TSource,bool>predicate) { ... } }//extension block, with a receiver type onlyextension<TSource>(IEnumerable<TSource>)//static extension members for IEnumerable<Source>{//static extension method:publicstaticIEnumerable<TSource> Combine(IEnumerable<TSource> first, IEnumerable<TSource>second) { ... }//static extension property:publicstaticIEnumerable<TSource> Identity => Enumerable.Empty<TSource>();//static user defined operator:publicstaticIEnumerable<TSource>operator+ (IEnumerable<TSource> left, IEnumerable<TSource> right) =>left.Concat(right); } }

定义的是一个 extension block,目标类型是:IEnumerable<TSource>

代码分成两类 extension block:

  1. 实例扩展成员

  2. 静态扩展成员

① 实例扩展成员:extension<TSource>(IEnumerable<TSource> source)

  • source 是接收者(receiver)

  • 类似旧语法的 this IEnumerable<TSource> source

  • 但语法更接近真正“为类型添加成员”

扩展属性:public bool IsEmpty => !source.Any();

编译器会生成:public static bool get_IsEmpty<TSource>(IEnumerable<TSource> source)

代码调用:list.IsEmpty

会被编译为:Enumerable.get_IsEmpty(list)

其本质仍然是:

静态方法 + 语法糖绑定

但在语义层面:它已经不再是“工具方法”,而是“类型能力”。

扩展方法:public IEnumerable<TSource> Where(Func<TSource, bool> predicate)

即增强原有LINQ的Where功能

如果系统中已有 System.Linq.Enumerable.Where

  • 实例成员优先

  • 然后才是 extension block

  • 再是 using 引入的扩展方法

不会破坏已有 API,只是参与候选集。

② 静态扩展成员

extension<TSource>(IEnumerable<TSource>)

这里没有 receiver 变量名。

为类型本身添加“静态扩展成员”

找一个静态扩展方法

public static IEnumerable<TSource> Combine(...)

代码调用:IEnumerable<int>.Combine(a, b);

编译器会转化为:Enumerable.Combine(a, b);

再看一个静态扩展属性

public static IEnumerable<TSource> Identity

代码调用:IEnumerable<int>.Identity

这在旧扩展方法体系中是无法表达的。

再看一个扩展运算符

public static IEnumerable<TSource> operator +

这是 C# 14 的重大增强点。现在你可以写:

var result = list1 + list2;

等价于:Enumerable.op_Addition(list1, list2);

三、底层编译机制

不修改 CLR 元数据

  • 不改变 IEnumerable<T>

  • 不增加真实成员

IL 仍然是静态方法

所有成员都会生成: public static ...

语义绑定由编译器完成

扩展成员解析规则:

  1. 实例真实成员

  2. 同 namespace extension block

  3. using 导入 extension block

四、与传统扩展方法对比

同时,零运行时开销。

  • 无反射

  • 无动态代理

  • 无装饰器

  • 无运行时注入

完全编译期绑定。

编译器级语义增强,不改变运行时类型结构。

以上分享给大家。

周国庆

20260218

http://www.jsqmd.com/news/391841/

相关文章:

  • 前景广阔的成都冒菜加盟:2026年合作品牌推荐,餐饮/冒菜店/冒菜/麻辣烫,成都冒菜加盟招商推荐排行榜单 - 品牌推荐师
  • 2026冲刺用!10个降AI率平台测评:专科生必看的降AI率工具推荐
  • 导师推荐 10 个 AI论文工具:本科生毕业论文写作全攻略
  • n8n工作流表达式评估漏洞导致远程代码执行风险
  • 2026冲刺用!10个降AIGC平台深度测评,研究生降AI率必备指南
  • 新手也能上手!自考论文神器 —— 千笔·专业论文写作工具
  • 手把手玩转PO-SVR:当美洲狮遇上回归预测的暴力美学
  • 拖延症福音 AI论文平台 千笔写作工具 VS 学术猹,专为本科生打造!
  • 互联网大厂Java求职面试实录:从Spring Boot到AI技术全栈解析
  • 2026必看!揭秘企业增长新趋势,GEO优化解决核心痛点,GEO优化AI工具排名,GEO优化广告公司找哪家 - 品牌推荐师
  • WordPress核心、插件和主题更新顺序
  • 聚焦2026墙面艺术漆,评测做得好的厂家优质单品,水性艺术涂料/外墙艺术漆/微晶石艺术漆,墙面艺术漆公司怎么选择 - 品牌推荐师
  • 测试一下WINCC 在线趋势控件不同时间跨度同一时刻数值是否相同1
  • 题解:洛谷 P3405 [USACO16DEC] Cities and States S
  • CSS 中的高度、滚动与溢出:从 height 到 overflow 的完整理解 - 实践
  • 高压直流输电Matlab/simulink仿真。 采用三电平换流器。 整流侧采用直流电压外环+...
  • 京东e卡回收正规平台价格如何,怎么选择? - 京顺回收
  • 闭眼入!MBA专属降AI率软件 —— 千笔·降AI率助手
  • 亲测好用!AI论文工具 千笔AI VS 知文AI,研究生写作神器!
  • 题解:洛谷 P5250 【深基17.例5】木材仓库
  • 照着用就行:千笔·降AIGC助手,继续教育论文降重神器!
  • 别再瞎找了!AI论文软件 千笔ai写作 VS 知文AI,专科生专属神器!
  • Backtrader平台下指数期权备兑策略回测完成
  • 学霸同款!万众偏爱的AI论文写作软件 —— 千笔写作工具
  • 评测三边封拉链袋,2026年这些厂商值得信赖,四边封包装袋/聚酯尼龙袋/三边封拉链袋,三边封拉链袋直销厂家排行榜 - 品牌推荐师
  • P1563 玩具谜题
  • 每次编译之后,写的代码都会消失
  • 2026年深圳好口碑氮化铝陶瓷片品牌推荐榜单 - 睿易优选
  • 协同过滤算法的Thinkphp和Laravel框架的大学生个性化兼职信息推荐系统的设计与实现
  • Thinkphp和Laravel框架的在线考试管理系统的设计与实现前台329fgzk