0

0

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

幻夢星雲

幻夢星雲

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

|

466人浏览过

|

来源于php中文网

原创

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

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

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

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

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

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

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

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

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

AITDK
AITDK

免费AI SEO工具,SEO的AI生成器

下载

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

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

  • 当你有一个内部 ListDictionary,又不想暴露整个集合(防止外部误清空或修改引用)
  • 需要对访问做统一校验(如索引越界抛 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聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

436

2023.08.07

json是什么
json是什么

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

543

2023.08.23

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

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

317

2023.10.13

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

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

81

2025.09.10

string转int
string转int

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

688

2023.08.02

string转int
string转int

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

688

2023.08.02

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

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

555

2024.08.29

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

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

193

2025.08.29

包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法
包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法

本专题汇总了包子漫画官网和网页版入口,提供最新章节抢先看方法、正版免费阅读指南,以及稳定访问方式,帮助用户快速直达包子漫画页面,无广告畅享全集漫画内容。

50

2026.02.10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 9.1万人学习

C 教程
C 教程

共75课时 | 4.6万人学习

C++教程
C++教程

共115课时 | 17.1万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号