• 索引是一组get和set访问器,类似于属性的访问器。
  • 索引和属性在很多方面是相似的。
  • 和属性一样,索引不用分配内存来存储;
  • 索引和属性都主要被用来访问其他数据成员,这些成员和他们关联,他们为这些成员提供设置和获取访问;
  • 属性通常表示单独的数据成员;
  • 索引通常表示多个数据成员;
  • 可以把索引想象成提供获取和设置类的多个数据成员的属性,通过提供索引在许多可能的数据成员中进行选择。索引本身可以是任何类型的,不仅仅是数值类型;

使用索引时,另外还有一些注意事项如下:

  • 和属性一样,索引可以只有一个访问器,也可以两个都有;
  • 索引总是实例成员。因此索引不能被声明为static;
  • 和属性一样,实现get和set访问器的代码,不一定要关联到某个字段或者属性。这段代码可以做任何事情也可以什么都不做,只要get访问器返回某个指定类型即可。

声明索引:

声明索引的语法如此下,请注意以下几点:

  • 索引没有名称,在名称位置的是关键字this;
  • 参数列表,在方括号中间;
  • 参数列表中至少必须声明一个参数。

声明索引类似于声明属性。下图有他们的相同点和不同点:

索引的set访问器:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ConsoleApplication2
  8. {
  9. public class Employee
  10. {
  11. public string FirstName;
  12. public string Lastname;
  13. public string CityOfBirth;
  14.  
  15. /// <summary>
  16. /// 创建索引
  17. /// </summary>
  18. /// <param name="index"></param>
  19. /// <returns></returns>
  20. public string this[int index]
  21. {
  22. set
  23. {
  24. switch (index)
  25. {
  26. case : FirstName = value; break;
  27. case : Lastname = value; break;
  28. case : CityOfBirth = value; break;
  29. default:
  30. throw new ArgumentOutOfRangeException("index");
  31. }
  32. }
  33. get
  34.  
  35. {
  36. switch (index)
  37. {
  38. case : return FirstName;
  39. case : return Lastname;
  40. case : return CityOfBirth;
  41. default:
  42. throw new ArgumentOutOfRangeException("index");
  43. }
  44. }
  45. }
  46. }
  47. }
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace 索引复习
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. Student stu = new Student()
  14. {
  15. firstName="c",
  16. lastName="b",
  17. cityOfBirth="w"
  18.  
  19. };
  20. //测试索引的访问
  21. Console.WriteLine("firstName={0}",stu[]);
  22. Console.ReadKey();
  23.  
  24. }
  25. }
  26. }

C#--索引的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(7):索引器

    在开始正题之前,先补充一点前面的内容. 在方法中,如果要引用方法参数,前面的示例中,老周使用的是 CodeVariableReferenceExpression 类,它用于引用变量,也适用于引用方法参 ...

  2. SQLSERVER聚集索引与非聚集索引的再次研究(上)

    SQLSERVER聚集索引与非聚集索引的再次研究(上) 上篇主要说聚集索引 下篇的地址:SQLSERVER聚集索引与非聚集索引的再次研究(下) 由于本人还是SQLSERVER菜鸟一枚,加上一些实验的逻 ...

  3. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  4. C# 索引器,实现IEnumerable接口的GetEnumerator()方法

    当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...

  5. 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

    本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...

  6. 开源 iOS 项目分类索引大全 - 待整理

    开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...

  7. SQL 数据优化索引建suo避免全表扫描

    首先什么是全表扫描和索引扫描?全表扫描所有数据过一遍才能显示数据结果,索引扫描就是索引,只需要扫描一部分数据就可以得到结果.如果数据没建立索引. 无索引的情况下搜索数据的速度和占用内存就会比用索引的检 ...

  8. MSSQL 事务,视图,索引,存储过程,触发器

    事务 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.这特别适用于多用户同时操作的数据 ...

  9. SQL Server 2014聚集列存储索引

    转发请注明引用和原文博客(http://www.cnblogs.com/wenBlog) 简介 之前已经写过两篇介绍列存储索引的文章,但是只有非聚集列存储索引,今天再来简单介绍一下聚集的列存储索引,也 ...

  10. SQL Server事务、视图和索引

    废话不多说,直接上干货 14:13:23 事务 概括:事务是一种机制,一个操作序列,包含一组数据库操作命令,并且把所有的命令作为一个整体一起 向系统提交或撤销操作 请求. 事务的特性:   1.原子性 ...

随机推荐

  1. 总结div里面水平垂直居中的实现方法

    最近经常碰到要垂直居中的问题,所以想着总结一下:关于如何设置小盒子在大盒子里面水平垂直方向同时居中的实现方法有很多种,下面仅列举了常用的几种. 首先看一下要实现的效果图及对应的html代码: < ...

  2. 转: Source Code Lookup in Eclipse(主要讲的是java的)

    Source Code Lookup in Eclipse https://www.intertech.com/Blog/source-code-lookup-in-eclipse/

  3. 主成分分析(PCA)

    相对与网上很多人分享的有关PCA的经历,我第一次接触PCA却不是从人脸表情识别开始的,但我所在的实验室方向之一是人脸的研究,最后也会回到这个方向上来吧. PCA(principal component ...

  4. 把普通java项目转换成maven项目

    我使用的是eclipse,右键项目,Configure->Convert to Maven Project 然后就是jar包的引入了,如果jar包比较简单,建议从maven中拉取,这样便于后期升 ...

  5. 在MyEclipse中设置jsp页面为默认utf-8编码(转)

    http://www.cnblogs.com/xdp-gacl/p/3496161.html 在MyEclispe中创建Jsp页面,Jsp页面的默认编码是“ISO-8859-1”,如下图所示: 在这种 ...

  6. Hibernate(十)HQL查询二

    一.数据库的emp名和dept表 建立持久化类和配置文件,可以用MyEclipse直接生成 持久化类 package entity; import java.util.Date; public cla ...

  7. Java从零开始学二十九(大数操作(BigIntger、BigDecimal)

    一.BigInteger 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作. 不可变的任意精度的整数.所有操作中 ...

  8. WPF使用DEV之TreeListControl---加入复选框

    1.绑定的Class中加入一个Bool类型的属性 2.   该属性无需初始赋值,你执行就可以看到如图: Bool类型数据自己主动变成了复选框 watermark/2/text/aHR0cDovL2Js ...

  9. 如何分析Java虚拟机死锁

    Thread Dump and Concurrency Locks Thread dumps are very useful for diagnosing synchronization relate ...

  10. inode备忘

    文件名 -> inode -> device block 转自:http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html 一 ...