讲师中心 微信公众号
AI工具推荐 视频效率加速

C# 索引器和属性的区别 C#索引器有什么特殊的用途

陌晨姑娘_7282

陌晨姑娘_7282

发布时间:2026-02-11 07:31:10

|

566人浏览过

|

来源于php中文网

原创

索引器必须是实例成员,不能声明为static;其get/set访问器需显式声明索引参数,支持重载但禁止自动实现;核心用途是让对象安全地模拟集合访问语义。

c# 索引器和属性的区别 c#索引器有什么特殊的用途

索引器必须是实例成员,不能声明为 static

这是最常被忽略的硬性限制:哪怕你只想封装一个静态字典,static indexer 也是非法的。编译器会直接报错 CS0708: 'xxx' cannot be declared static。想实现类似效果?只能用静态方法(如 GetItem(int key))或暴露静态属性(如 public static Dictionary<int string> Items { get; }</int>),但这就失去了 obj[5] 的语法糖优势。

索引器的 get/set 访问器带参数,value 不是唯一隐式参数

属性的 get 没参数,set 只有隐式 value;而索引器的 get 和 set 都必须显式声明形参列表,且 set 的参数列表 = 索引参数 + 隐式 value。比如二维访问:

public string this[int row, int col]<br>{<br>    get => _data[row, col];<br>    set => _data[row, col] = value; // value 是 string,row/col 是索引参数<br>}
漏写任一索引参数,编译就失败。

索引器支持重载,但不能自动实现

你可以同时定义 this[int i]、this[string key]、this[DateTime when],只要参数签名不同即可。但注意:public string this[int i] { get; set; } 这种自动实现写法是**不合法的**——编译器无法推断底层存储结构。你必须手动实现 get 和 set,并明确操作哪个字段(如 _list[i] 或 _dict[key])。否则会收到 CS0720: 'xxx': cannot declare a static indexer 类似误导性错误(实际是因自动实现被禁用)。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载

索引器真正的用途:让对象“长得像集合”,而非替代属性

它不是为了炫技,而是解决特定封装场景:

  • 当你有一个内部 List<t></t> 或 Dictionary<k></k>,又不想暴露整个集合(防止外部误清空或修改引用)
  • 需要对访问做统一校验(如索引越界抛 ArgumentOutOfRangeException,键不存在时返回默认值或抛异常)
  • 想模拟多维语义(如矩阵类 matrix[2,3]、日志类 logs["2026-01-30"][15])
这时候,索引器比一堆 GetAt(int) / SetAt(int, T) 方法更自然,也比公开属性更安全。

最容易被忽略的一点:索引器在序列化(如 JSON.NET)、反射遍历、WPF 绑定时默认不可见——它不会被当成普通属性处理。如果你依赖这些机制,得额外加 [IndexerName("Item")] 或改用显式方法。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2275

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3702

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1236

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4299

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7259

2023.08.02

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7259

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3465

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4528

2025.08.29

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn