前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[C#] 索引器

[C#] 索引器

作者头像
科控物联
发布2022-03-29 16:39:48
3170
发布2022-03-29 16:39:48
举报
文章被收录于专栏:科控自动化

索引器为访问类或者结构体中封装的列表或字典型数据元素提供了自然的访问接口。索引器和属性很相似,但索引器通过索引值而非属性名称访问数据元素。例如string类具有索引器,可以通过int索引访问其中每一个char的值。

string s = "hello";

Console.WriteLine (s[0]); // 'h'

Console.WriteLine (s[3]); // 'l'

使用索引器的语法就像使用数组一样,不同之处在于索引参数可以是任意类型。

索引器和属性具有相同的修饰符(请参见3.1.6节),并且可以在方括号前插入?以使用null条件运算(请参见2.10节):

string s = null;

Console.WriteLine (s?[0]); // Writes nothing; no error.

1 索引器的实现

编写索引器首先要定义一个名为this的属性,并将参数定义放在一对方括号中。例如:

class Sentence

{

string[] words = "The quick brown fox".Split();

public string this [int wordNum] // indexer

{

get { return words [wordNum]; }

set { words [wordNum] = value; }

}

}

以下展示了索引器的使用方式:

Sentence s = new Sentence();

Console.WriteLine (s[3]); // fox

s[3] = "kangaroo";

Console.WriteLine (s[3]); // kangaroo

一个类型可以定义多个参数类型不同的索引器,一个索引器也可以包含多个参数:

public string this [int arg1, string arg2]

{

get { ... } set { ... }

}

如果省略set访问器,则索引器就是只读的,并且可以使用C# 6的表达式语法来简化定义。

public string this [int wordNum] => words [wordNum];

2 CLR索引器的实现

索引器在内部会编译为名为get_Item和set_Item的方法,如下所示:

public string get_Item (int wordNum) {...}

public void set_Item (int wordNum, string value) {...}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档