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

news/2025/11/22 18:06:33/文章来源:https://www.cnblogs.com/qife122/p/19258273

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.mzph.cn/news/973307.shtml

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

相关文章

多机elasticsearch集群部署,超详细教程

假设我们有三台机器,172.24.52.209,172.24.52.210,172.24.52.211。 用户名xjw 三台机器都创建文件夹/home/xjw/docker/learning/elasticsearch,和/home/xjw/docker/learning/kibana,learning为项目名 mkdir -p /h…

DeepSeek 提取 交易所网站核心500词汇(名词与术语)

DeepSeek 提取 交易所网站核心500词汇(名词与术语)交易所网站核心词汇扩充(名词与术语) 1. 市场结构与微观结构 英文术语中文翻译Auction 竞价Opening Auction 开市竞价Volatility Control Mechanism 市场波动调节…

[251122 678mAh] 模拟赛没破防有感 3.0

/hanx我写完 T4 了。 编译运行。 好的,卡住了。 应该是 RE 了。 ?为什么是在输出完答案之后卡住。 (想起了不好的回忆) 诶,别! 别别别别别! 就剩一个小时了别给我干死机了,这次可不是在线提交啊机子还原一下整…

白银市一对一培训机构推荐,2026年最新课外辅导全面测评口碑排名榜

在白银这座教育资源蓬勃发展的城市,从白银区繁华的北京路商圈到平川区快速崛起的会展中心周边,从靖远县文教氛围浓厚的学府街区到会宁县底蕴深厚的教育板块,从景泰县充满活力的新城商圈到皋兰县快速成长的教育园区,…

天水市一对一培训机构推荐,2026最新课外辅导机构口碑深度测评排名榜

在天水市,无论是秦州、麦积两区的繁华都市圈,还是秦安、甘谷、武山、清水、张家川回族自治县等地的莘莘学子,家长们都怀揣着同样的期望:让孩子在接受优质校内教育的同时,能通过课外辅导弥补短板、拔高优势,在求学…

CSAPP bomblab

规则:对于每个\(phase\),你都需要输入一个字符串,使得\(explode\_bomb\)函数不被运行 在bomb目录下使用objdump -d bomb > bomb.s得到反汇编文件\(bomb.s\) \(shell\) 中使用 gdb bomb进入\(gdb\)调试phase_1000…

history of linux

Linux 是一个开源的、跨平台的操作系统,其历史可以追溯到 1991 年。以下是 Linux 的主要发展历史阶段:1. 前身:Minix(1987)开发者:Andrew S. Tanenbaum特点:一个小型、可移植的操作系统内核,主要用于教学。与 …

history linux

当你在 Linux 系统中运行 history 命令时,它会显示你之前执行过的命令历史记录。这个命令是 Shell(如 Bash)内置的,用于跟踪用户在终端中执行过的命令。1. 基本用法history功能:显示当前终端中执行过的命令历史记…

Spring BeanFactoryPostProcessor 接口

[[Spring IOC 源码学习总笔记]] BeanFactoryPostProcessor是 Spring 框架提供的一个扩展点接口,它允许开发者在 Spring 在BeanFactory 加载了所有bean定义,但尚未实例化任何bean 之后,对底层的 BeanDefinition 和 B…

嘉峪关市一对一培训机构推荐,2026年最新课外补习辅导口碑排名

在雄伟的嘉峪关脚下,教育的热潮正席卷这座城市的每个角落。从雄关区的人民商城周边,到长城区的富强路商圈,再到镜铁区的润泽园社区,随处可见家长们为子女教育奔波的身影。小学生的数学思维拓展与语文阅读能力提升,…

2025 AI 教育培训权威推荐榜深度评测排名

2025 AI 教育培训权威推荐榜深度评测排名 痛点深度剖析 我们团队在实践中发现,当前 AI 教育培训领域存在着诸多核心技术挑战。在教学内容方面,AI 技术发展迅猛,知识更新换代极快,很多培训机构的课程内容难以跟上技…

详细介绍:第七篇:匹配篇 | 怎么像做产品一样,为每个岗位“定制”你的简历?

详细介绍:第七篇:匹配篇 | 怎么像做产品一样,为每个岗位“定制”你的简历?2025-11-22 17:40 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow…

2025年布袋除尘器供应商权威推荐榜单:塑烧板除尘器/耐高温除尘器/防爆除尘器源头厂家精选

在环保要求日益严格的工业制造领域,布袋除尘器作为工业粉尘治理的核心设备,其过滤效率与运行稳定性直接关系到企业的环保合规与生产成本。 工业布袋除尘器通过滤袋过滤、脉冲清灰等技术,能有效捕集工业生产中产生的…

hbuilder是否支持云端部署

HBuilder确实支持云端部署。它提供了云端打包功能,允许开发者将项目上传到云端服务器进行打包,生成Android和iOS平台的安装包。以下是HBuilder云端部署的相关信息: HBuilder云端部署支持云端打包功能:HBuilder支持…

创建矩形并让矩形移动

RGB是颜色值 使⽤⼀个元组 (R, G, B) 表示,每个值范围 0-255 。 ⿊⾊: (0, 0, 0) ⽩⾊: (255, 255, 255) 绿⾊: (0, 255, 0) pygame 坐标系 原点 (0, 0):窗⼝的左上⻆。 X 轴:向右增加 Y 轴:向下增加 按下的按键类…

2025年稳定土搅拌站供应商权威推荐榜单:搅拌站回收/二手稳定土搅拌站/二手混凝土土搅拌站源头厂家精选

在基础设施建设持续发展的背景下,稳定土搅拌站作为道路工程、机场跑道等项目的关键设备,其生产效率、混合均匀性与运行稳定性直接关系到工程质量和施工进度。 稳定土搅拌站通过精确的配料系统与高效的搅拌工艺,将水…

blender能量体全息化效果学习

blender能量体全息化效果学习您提供的这个视频是 **Heavenly** 的经典作品《Growing Girl EX PART 1》。我已经分析了视频中角色变大时的视觉效果,这确实不是简单的“边缘发光”,而是一个组合特效。 这个效果在 Blen…

2025教育AI供应商TOP10权威评测:AI时代下的技术赋能与行业变革

2025教育AI供应商TOP10权威评测:AI时代下的技术赋能与行业变革 行业痛点分析 当前AI教育培训领域面临多重技术挑战。数据显示,教育机构在数字化转型过程中普遍存在技术应用效率低下、个性化教学实施困难等问题。测试…

从组件的角度梳理微服务技术栈(1)

微服务技术栈核心组件详解 一、微服务架构概述 微服务架构将单体应用拆分为一组小型、独立的服务,每个服务运行在自己的进程中,通过轻量级机制通信。这种架构带来了部署灵活、技术异构等优势,但也引入了服务发现、通…

树的直径、重心、中心 学习笔记

引入——什么是树? 树是一个简单无环无向连通图,其由 \(n\) 个点与 \(n-1\) 条边组成。它是一种特殊的图。 树的直径 定义 定义树上任意两点之间最长的简单路径为树的直径。 一棵树可能拥有多条直径。 求解 两次 DFS…