尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
C# 索引器详解:从相册与照片示例理解 this 索引器
一、引言在 C# 中索引器Indexer允许我们像访问数组一样访问对象的成员。它让自定义类型具备“按下标取值”的能力从而在语义上更贴近真实业务对象。本文以一个“相册与照片”的小例子完整演示索引器的定义、重载、只读索引器以及使用注意事项。二、示例背景相册与照片我们设计两个类Photo表示一张照片包含标题属性Album表示一个相册内部用数组存放照片并通过索引器提供两种检索方式按数字下标检索、按标题检索。三、Photo 类被管理的照片对象先定义照片类包含一个私有字段和两个构造函数并通过只读属性对外暴露标题。using System; public class Photo // 相片类 { private string _title; // 相片标题 // 默认构造函数 public Photo() { // 初始化相片标题 _title 我是张三; } // 带参数的构造函数 public Photo(string title) { _title title; } // 只读属性 public string Title { get { return _title; } } }四、Album 类使用索引器检索照片Album内部维护一个Photo数组并提供两个索引器this[int index]支持读写this[string title]只提供get用于按标题查找。public class Album { private Photo[] photos; // 用于存放照片的数组 public Album() { // 默认初始化相册大小 photos new Photo[3]; } public Album(int capacity) { // 按指定容量初始化相册 photos new Photo[capacity]; } // 索引器一按数字下标检索照片可读可写 public Photo this[int index] { get { if (index 0 || index photos.Length) { Console.WriteLine(索引无效); return null; } return photos[index]; } set { if (index 0 || index photos.Length) { Console.WriteLine(索引无效); return; // set 访问器无返回值直接 return 即可 } photos[index] value; } } // 索引器二按标题检索照片只读 public Photo this[string title] { get { foreach (Photo p in photos) { if (p ! null p.Title title) { return p; } } Console.WriteLine(没有该照片); return null; // 使用 null 表示查找失败 } } }五、测试代码两种方式访问相册下面的Main方法演示了如何通过下标写入照片以及如何分别用下标和标题读取照片。class Test { static void Main(string[] args) { Album friends new Album(3); // 创建容量为 3 的相册 // 创建 3 张照片 Photo first new Photo(逍遥); Photo second new Photo(太子); Photo third new Photo(姚佳); friends[0] first; friends[1] second; friends[2] third; // 按索引查询 Photo objPhoto friends[2]; Console.WriteLine(objPhoto.Title); // 按标题查询 Photo obj2Photo friends[太子]; Console.WriteLine(obj2Photo.Title); } }六、索引器的关键要点使用 this 关键字索引器通过this[...]声明本质上是带参数的属性。访问器与属性一致索引器同样使用get和set可以只实现其中一个。支持重载只要参数列表不同就可以定义多个索引器例如按int下标和按string标题。与数组的区别数组只能通过整数下标访问而索引器可以自定义参数类型和访问逻辑。边界检查在get和set中都要校验下标范围避免越界访问。七、使用建议注意只有当把数组作为对象对待更加直观时才使用索引器。若只是简单的集合访问优先考虑普通方法或集合类型避免语义不清。此外只读索引器适合“查找”场景写入场景应显式提供方法或可写索引器让调用方清楚哪些操作会改变对象状态。
RELATED

相关推荐

项目工程文件

项目工程文件

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/27 1:01:16
agent-skills协议:可插拔AI技能的声明式交付标准

agent-skills协议:可插拔AI技能的声明式交付标准

1. “agent-skills”不是功能模块,而是一套可插拔的能力交付协议你第一次在 GitHub 仓库名里看到agent-skills,或在 CLI 工具的--skills参数后跟一串路径时,大概率会下意识把它理解成“AI Agent 能做的几件事列表”——比如“查天气”“读文件…

📅 2026/10/27 0:56:16
前端Leader转AI Agent 66天:从组件思维到工具调用的技术平移

前端Leader转AI Agent 66天:从组件思维到工具调用的技术平移

1. 前端Leader转Agent,第66天我到底在折腾什么先交代一下背景。我自己做了十一年多前端,从写jQuery插件到带前端团队搞微前端、组件库、工程化基建,算是个标准的"老前端"。今年年初开始系统性地学AI Agent,Day 66这个节…

📅 2026/10/27 0:56:16
MORE NEWS

更多资讯

📰

ZXing BitMatrix 位矩阵全解:一个 int 如何扛起 32 个像素的二维码生成底层逻辑

ZXing BitMatrix 位矩阵全解:一个 int 如何扛起 32 个像素的二维码生成底层逻辑 【免费下载链接】zxing ZXing ("Zebra Crossing") barcode scanning library for Java, Android 项目地址: https://gitcode.com/gh_mirrors/zx/zxing 你以为的二维码…

📰

React Native 鸿蒙实战:view-shot 视图截图在 HarmonyOS 上的接入与使用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

DSH Desktop 快速上手:一键安装桌面AI智能体客户端

DSH Desktop 快速上手:一键安装桌面AI智能体客户端 【免费下载链接】deepseek-harness-desktop 为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。 项目地址: https://gitcode.com/gh_mirrors/de…

📰

TVS与ESD保护器件选型详解:从零理解静电、浪涌、参数计算与接口保护

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

离线会议纪要的硬件适配:没有独立显卡,也能本地生成纪要

离线会议纪要的硬件适配:没有独立显卡,也能本地生成纪要技术观察 阅读约 5 分钟本地化部署的语音转写工具,通常对硬件有一定门槛:显存不够,大模型跑不起来,会议纪要这种重负载任务更是如此。最近智转AI 预…

📰

全球DEM数据校验、格式选型与GIS地形分析实操

简介:面向GIS从业者与地理信息学习者的全球DEM地形数据获取文档,聚焦全球高程数据下载渠道分散、免费工具与学习资料难配套的问题。压缩包仅含1个docx文件,约12KB,篇幅精炼,集中整理全球范围DEM数据的百度网盘与天翼云…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬