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

C#扩展成员全面解析:从方法到属性的演进

C#扩展成员:你需要知道的一切

扩展方法在C#中已经存在很长时间。它们允许你向现有类型添加新方法,而无需修改其源代码。这在处理你无法控制的框架或库中的类型时非常有用。

然而,扩展方法有一个令人烦恼的地方:每个方法都必须在静态类中定义,并且每个方法都必须使用this修饰符声明第一个参数。当你为同一类型编写多个扩展方法时,代码开始变得重复。

扩展成员就是为了解决这个问题而引入的,它允许你将扩展方法分组到与特定类型相关的扩展块中。

什么是扩展成员?

扩展成员允许你定义这样的扩展范围:

extension System.String
{// 实例扩展int WordCount() => this.Split(' ').Length;// 静态扩展static bool IsNullOrEmpty(string? value) => string.IsNullOrEmpty(value);
}

前后对比

之前(经典扩展方法)

public static class StringExtensions
{public static int WordCount(this string text){return text.Split(' ').Length;}
}

之后(扩展块)

extension System.String
{int WordCount() => this.Split(' ').Length;
}

示例

extension System.String
{bool IsLong() => this.Length > 20;static string? EmptyIfNull(string? value) => value ?? string.Empty;
}

使用方式

string message = "Hello World";
bool isLong = message.IsLong();
string result = string.EmptyIfNull(null);

扩展成员优先级规则

扩展成员的优先级总是低于类型的现有成员。这意味着:如果类型已经定义了同名方法,则使用类型的方法。

示例

extension System.String
{string ToUpper() => "Extension ToUpper called";
}var text = "hello";
Console.WriteLine(text.ToUpper());

输出:
HELLO
=> 内置的string.ToUpper()获胜

C# 14中的扩展成员 - 有什么变化?

C# 13引入了扩展块,允许你更自然地定义现有类型的方法和静态助手。C# 14进一步扩展了这一功能,允许你定义更多种类的成员,而不仅仅是方法。

示例:扩展属性(C# 14)

extension System.String
{int WordCount => this.Split(' ', StringSplitOptions.RemoveEmptyEntries).Length;
}

使用方式

string text = "Hello world from C#";
Console.WriteLine(text.WordCount); // 4

没有括号。它的行为完全类似于只读属性。

示例:扩展索引器(C# 14)

extension System.String
{char this[Index index] => this[index];
}

使用方式

string s = "Hello";
Console.WriteLine(s[^1]); // o

这允许使用惯用的切片方式,而无需编写自己的助手代码。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

http://www.gsyq.cn/news/57513.html

相关文章:

  • 白银市一对一培训机构推荐,2026年最新课外辅导全面测评口碑排名榜
  • 天水市一对一培训机构推荐,2026最新课外辅导机构口碑深度测评排名榜
  • Spring BeanFactoryPostProcessor 接口
  • 详细介绍:第七篇:匹配篇 | 怎么像做产品一样,为每个岗位“定制”你的简历?
  • hbuilder是否支持云端部署
  • 2025教育AI供应商TOP10权威评测:AI时代下的技术赋能与行业变革
  • 实用指南:零基础从头教学Linux(Day 54)
  • 完整教程:医疗领域DICOM特征提取工具类综合对比(2025.10更新版)
  • CS2撤回功能与市场经济的结合
  • 面向模块的综合技术之控制集优化(七) - 教程
  • 2025酱酒选品怕踩坑?宴请自饮高性价比核心产区品牌实测
  • 2025年冷却塔工厂权威推荐榜单:横流式冷却塔/节能冷却塔/蒸发式冷却塔设备源头厂家精选
  • 分布式存储数据结构LSM在HBase中的应用
  • 完整教程:FPGA DDR3实战(七):Xilinx FPGA DDR3性能深度测试----吞吐率与延迟精准分析
  • 11.17-11.22 总结
  • 2025年陶瓷防静电地板工厂权威推荐榜单:木基防静电地板/铝合金防静电地板/硫酸钙防静电地板源头厂家精选
  • 2025年钢丝绳牵引格栅机批发厂家权威推荐榜单:抓斗清污机/耙斗清污机/移动抓斗清污机源头厂家精选
  • 2025云南曲靖市玉溪市一对一家教辅导测评排行榜:权威推荐高性价比选择
  • P10683 [COTS 2024] 划分 Particija
  • 纵观当代现状,70年代出生的人,可能别具一格
  • 2025年重庆废气收集处理机构权威推荐榜单:废气处理/废气治理/废气处理设备源头机构精选
  • 征程 6E/M 计算平台部署指南
  • 详细介绍:第三章 FreeRTOS 任务相关 API 函数
  • 2025年口碑好的江苏婚纱照/婚前影像/小众婚纱照/园林婚纱照/光影婚纱照/外景婚纱照/秀禾婚纱照/中式婚纱照/结婚照品牌推荐:弥素摄影领跑
  • 2025年11月22日
  • 【Java后端进行ai coding实践系列】如何使用ai coding达成计划任务增删改查
  • 2025-11-21 hetao1733837的刷题记录
  • C# Avalonia 18- ControlTemplates - FlipPanelTest
  • CTF逆向Re:零基础系统性入门教程-5-动态调试
  • CF1817B Fish Graph