C#:索引
1. 什么是索引
索引是一组get和set访问器,类似于属性的访问器。
2. 索引和属性
- 和属性一样,索引不用分配内存来存储
- 索引和属性都主要被用来访问其他数据成员,这些成员和它们关联,它们为这些成员提供设置和获取访问:(1)属性通常是访问单独的数据成员;(2)缩影通常是访问多个数据成员
- 索引可以只有一个访问器,也可以两个都有
- 索引总是实例成员,因此,索引不能被声明为static
- 和属性一样,实现get和set访问器的代码不必一定关联到某个字段或属性。这段代码可以做任何事情或者什么也不做,只要get访问器返回某个指定类型的值即可
3. 声明索引
- 索引没有名称,在名称的位置是关键字this
- 参数列表在方括号中间
- 参数列表中至少必须声明一个参数
4. 两个索引的示例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication11 { class Employee { public string LastName; public string FirstName; public string CityOfBirth; public string this[int index] { set { switch (index) { case 0: LastName = value; break; case 1: FirstName = value; break; case 2: CityOfBirth = value; break; default: throw new ArgumentOutOfRangeException("Index"); } } get { switch (index) { case 0: return LastName; case 1: return FirstName; case 2: return CityOfBirth; default: throw new ArgumentOutOfRangeException("Index"); } } } } class Example { int Temp0; int Temp1; public int this[int index] { get { return (0 == index) ? Temp0 : Temp1; } set { if (0 == index) { Temp0 = value; } else { Temp1 = value; } } } } class Program { static void Main(string[] args) { Employee emp1 = new Employee(); emp1[0] = "Doe"; emp1[1] = "Jane"; emp1[2] = "Dallas"; Console.WriteLine("{0}", emp1[0]); Console.WriteLine("{0}", emp1[1]); Console.WriteLine("{0}", emp1[2]); Example a = new Example(); a[0] = 15; a[1] = 20; Console.WriteLine("Values--T0:{0}, T1:{1}", a[0], a[1]); Console.ReadLine(); } } }
5. 索引重载
只要索引的参数列表不同,类可以有不止一个索引。
class MyClass { public string this[int index] { get { return "Testing"; } set { } } public string this[int index1, int index2] { get { return "Testing"; } set { } } public int this[float index] { get { return 3; } set { } } }
6. 访问器的访问修饰符
默认情况下,成员的两个访问器有和成员自身相同的访问级别。在特定情况下,成员的访问器可以有不同的访问级别。
- 仅当成员既有get访问器也有set访问器时,其访问器才能有访问修饰符
- 虽然两个访问器都必须出现,但它们中只能有一个访问修饰符
- 访问器的访问修饰符必须比成员的访问级别有更严格的限制性
posted on 2013-10-09 12:30 LilianChen 阅读(975) 评论(0) 编辑 收藏 举报