C# 索引器与数组是怎么传递的?
public class IndexerClass
{
private string[] name = new string[3];
//索引器必须以this关键字定义,其实这个this就是类实例化之后的对象
public string this[int index]// 这里的index是代表数组name的下标吗???
{
//实现索引器的get方法
get
{
if (index < 3)
{
return name[index];// 这里的name[index]代表的什么???
}
return null;
}
//实现索引器的set方法
set
{
if (index < 3)
{
name[index] = value;
}
}
}
}
public class Test
{
static void Main()
{
//索引器的使用
IndexerClass Indexer = new IndexerClass();
//“=”号右边对索引器赋值,其实就是调用其set方法
Indexer[0] = "张三";
Indexer[1] = "李四";
Indexer[2] = "王五";
//输出索引器的值,其实就是调用其get方法
Console.WriteLine(Indexer[0]);//张三
Console.WriteLine(Indexer[1]);//李四
Console.WriteLine(Indexer[2]);
Console.ReadKey();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我写了段代码:
这是拿refelctor的逆向结果(对应的c#源码是我手动补上的):
索引器又叫做“索引属性”,也是属性的一种。而属性最终都要编译成普通方法的形式。反映在msil上面就是
callvirt
实例方法调用,set_Item(int32, !0)
和get_Item(int32)
。数组的下标操作应该是msil的特化指令,可以看到上图中有
newarr
、stelem
和ldelem
指令。自己可以拿个reflector看编译后的msil。
//个人理解,如有错误请明示!
//.....
//.....
//ps:自学来的,可能有错误。而且是自己的理解,如有错误请不吝指导。
//pps:首答!(学知乎上的)
//检查了一遍回答之后发现有点答不对题。。。每太理解传递的意思
//可以理解为 c1[0] 与类的私有成员 number[0]是对应吧
简单的说,索引器是一种数据存取的方式,就是以方括号的方式获取/设置类似于集合的成员值这样的一种方式。索引器不一定要与内部数据对应,比如
当然,也不一定非得是 int 参数,比如
甚至,索引也可以是多维的(不止一个参数),比如
当然上面的例子都只实现了
get
,忽略了set
,要实现set
也类似,只是因为我这些实际都没有什么实际意义,所以就懒得写set
了。