当前位置: 首页 > 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.jsqmd.com/news/47764/

相关文章:

  • 多机elasticsearch集群部署,超详细教程
  • DeepSeek 提取 交易所网站核心500词汇(名词与术语)
  • [251122 678mAh] 模拟赛没破防有感 3.0
  • 白银市一对一培训机构推荐,2026年最新课外辅导全面测评口碑排名榜
  • 天水市一对一培训机构推荐,2026最新课外辅导机构口碑深度测评排名榜
  • 嘉峪关市一对一培训机构推荐,2026年最新课外补习辅导口碑排名
  • 2025 AI 教育培训权威推荐榜深度评测排名
  • 详细介绍:第七篇:匹配篇 | 怎么像做产品一样,为每个岗位“定制”你的简历?
  • hbuilder是否支持云端部署
  • 创建矩形并让矩形移动
  • 2025年稳定土搅拌站供应商权威推荐榜单:搅拌站回收/二手稳定土搅拌站/二手混凝土土搅拌站源头厂家精选
  • blender能量体全息化效果学习
  • 2025教育AI供应商TOP10权威评测:AI时代下的技术赋能与行业变革
  • 从组件的角度梳理微服务技术栈(1)
  • 树的直径、重心、中心 学习笔记
  • 三次单部电梯调度程序设计总结
  • 实用指南:零基础从头教学Linux(Day 54)
  • 2025年充气水上乐园设备权威推荐榜单:室内水上乐园设备/水上乐园滑梯/泳池造浪设备源头厂家精选
  • 完整教程:医疗领域DICOM特征提取工具类综合对比(2025.10更新版)
  • CS2撤回功能与市场经济的结合
  • 深入解析:带你了解STM32:WDG看门狗
  • 面向模块的综合技术之控制集优化(七) - 教程
  • FastAPI docker demo
  • 2025年铁氟龙膜源头厂家权威推荐榜单:特氟龙膜/PTFE膜/聚四氟乙烯膜源头厂家精选
  • 我的代码入选GitHub北极代码库
  • 兰州市一对一培训机构推荐,2026年最新课外辅导补习机构口碑深度测评排名榜
  • 2025酱酒选品怕踩坑?宴请自饮高性价比核心产区品牌实测
  • 2025年工业用防爆除湿机制造企业权威推荐榜单:防爆恒温恒湿机/防爆工业除湿机/防爆调温除湿机源头厂家精选
  • 2025年冷却塔工厂权威推荐榜单:横流式冷却塔/节能冷却塔/蒸发式冷却塔设备源头厂家精选
  • 安阳一对一课外辅导机构推荐:2026年最新排行榜单