高级
索引
C# 索引器
C# Indexers
前言
索引器(Indexer)允许我们像访问数组一样,通过索引访问类的实例。这使得我们可以使用类似于数组的语法来操作类的内部数据,提升代码的可读性和简洁性。
作用
索引器的主要作用包括:
- 简化语法:通过索引器,我们可以用简洁的语法来访问类的内部数据,就像使用数组一样。
- 封装数据:索引器允许我们在类内部封装数据,并提供对数据的访问方式,而不暴露类的内部实现细节。
- 提供灵活的数据访问:可以通过索引器访问和修改对象的状态,使得类的设计更加灵活。
使用场景
- 简化数据访问:当类的内部数据结构需要以类似数组的方式访问时,使用索引器可以简化代码。
- 封装和保护数据:可以通过索引器封装数据,提供更受控的访问方式。
- 实现复杂的数据存取逻辑:在类中实现索引器,可以让我们自定义数据的获取和设置逻辑。
示例
- 示例 1:基本索引器
using System;
class Program
{
// 声明一个数组以存储元素
private string[] studentName = new string[10];
// 定义一个索引器
public string this[int index]
{
get
{
// 返回存储在 studentName 数组中的值
return studentName[index];
}
set
{
// 将值赋给 studentName
studentName[index] = value;
}
}
public static void Main()
{
// 创建 Program 类的实例
Program obj = new Program();
// 使用索引器在 obj[] 中插入值,即通过索引位置
obj[0] = "张三";
obj[1] = "李四";
obj[2] = "王五";
Console.WriteLine("obj 中的第一个元素: " + obj[0]);
Console.WriteLine("obj 中的第二个元素: " + obj[1]);
}
}
输出
obj 中的第一个元素: 张三
obj 中的第二个元素: 李四
在这个示例中,我们定义了一个 studentName
数组,并通过索引器 this[int index]
访问和修改数组中的元素。我们通过 obj
实例像使用数组一样访问 studentName
中的元素。
- 示例 2:泛型索引器
using System;
class EmployeeInfo<T>
{
// 声明一个数组以存储元素
private T[] employee = new T[50];
// 定义一个索引器
public T this[int index]
{
get
{
// 返回存储在 employee 数组中的值
return employee[index];
}
set
{
// 将值赋给 employee
employee[index] = value;
}
}
}
class Program
{
public static void Main()
{
// 创建一个 int 类型的 EmployeeInfo 类实例
EmployeeInfo<int> Id = new EmployeeInfo<int>();
// 使用索引器在 Id[] 中插入整数值,即通过索引位置
Id[0] = 3;
Id[1] = 23;
Id[2] = 10;
Console.WriteLine("Id 对象中的第一个元素: " + Id[0]);
// 创建一个 string 类型的 EmployeeInfo 类实例
EmployeeInfo<string> Name = new EmployeeInfo<string>();
// 使用索引器在 Name[] 中插入字符串值,即通过索引位置
Name[0] = "张三";
Name[1] = "李四";
Name[2] = "王五";
Console.WriteLine("Name 对象中的第一个元素: " + Name[0]);
}
}
输出
Id 对象中的第一个元素: 3
Name 对象中的第一个元素: 张三
在这个示例中,我们定义了一个泛型索引器 T
,允许我们在 EmployeeInfo<T>
类中使用不同的数据类型。我们创建了 int
和 string
类型的 EmployeeInfo
类实例,并通过索引器访问和修改数据。
结语
索引器是 C# 中一个强大的特性,它简化了对象内部数据的访问方式,使得类的使用更加直观和方便。通过使用索引器,我们可以像操作数组一样操作类的实例数据,从而提升代码的可读性和维护性。