随笔 - 307  文章 - 0  评论 - 30  阅读 - 79万

C#中的索引的入门

C#中的索引器是新增加的,和属性有些不同。在C#中,属性可以是这样的:

class Person {
private string firstname;
public string FirstName
 {
get {return firstname;}

set {firstname = value;}
}

}

属性声明可以如下编码: 
Person p = new Person();
p.FirstName = "TOM";
Console.WriteLine (p.FirstName);

  属性声明倒更像是域声明,只不过它还声明了两个特殊的成员,按照微软的说法就是所谓的访问函数(accessor)(见代码中浅黄色部分)。当某一表达式的右边调用属性或者属性用作其他子程序(或者函数)的参数时即会调用get访问函数。反之,当表达式左边调用属性并且通过隐式传递value参数设置私有域值的情况下就会调用set访问函数。
  索引器(Indexer)是C#引入的一个新型的类成员,它使得对象可以像数组那样被方便,直观的引用。索引器非常类似于我们前面讲到的属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。下面是个例子:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class MyPreviousExp
    {
         
        private string[] myCompanies = new string[10];
 
         //index creation
        public string this[int index]{
                      get
                      {
                       if(index <0 || index >= 6)
                        return "null";
                       else
                        return myCompanies[index];
                      }
                      set
                      {
                       if(!(index <0 || index >= 10))
                        myCompanies[index] = value;
                      }
 
        }
         
        public static void Main()
        {
            MyPreviousExp indexerObj = new MyPreviousExp();
 
            indexerObj[0] = "AMS";
            indexerObj[3] = "HCL";
            indexerObj[5] = "ACC";
            indexerObj[8] = "OFW";
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(" My Companies{0} : {1} ", i, indexerObj[i]);
            }
        }
    }
}

输出结果为:

1
2
3
4
5
6
7
8
9
10
My Companies0 : AMS
My Companies1 :
My Companies2 :
My Companies3 : HCL
My Companies4 :
My Companies5 : ACC
My Companies6 : null
My Companies7 : null
My Companies8 : null
My Companies9 : null
可以看到,索引不仅仅是对一个数组成员的访问,因为 

indexerObj[8] = "OFW"; 

处是有值的,但是在输出中却显示了

My Companies8 : null ,

出现这样的原因是在 get accessor中有这样一行代码

1
if(index <0 || index >= 6)
1
return "null";

所以即使是在[]的参数列表中有访问到位置8,也不能成功输出,更甚,可以在 get accessor 中乱写,达到一些根本就不是索引器该做的工作,例如全部输出 1 之类,但是这不是 accessor 的本意,就不在这里赘述了。

 

 

 

 

posted on   kkmm  阅读(3099)  评论(0编辑  收藏  举报
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
< 2010年10月 >
26 27 28 29 30 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6

点击右上角即可分享
微信分享提示