📜  C#|索引器超载(1)

📅  最后修改于: 2023-12-03 15:30:18.186000             🧑  作者: Mango

C# | 索引器超载

C#中的索引器(Indexer)是一种特殊的属性,它允许对象像数组一样通过索引访问其元素。索引器可以是数组、列表或其他集合类型的封装器。通过索引器,我们可以像访问数组元素一样访问对象中的元素。默认情况下,C#提供了一个内置的索引器,但是,我们也可以对自己定义的类实现索引器。

索引器的基本语法
public ElementType this[int index]  
{  
    get  
    {  
        // 返回指定索引位置的值  
    }  
    set  
    {  
        // 设置指定索引位置的值  
    }  
}  

其实现了数组下标访问符[]的访问器。

实现索引器超载的语法

在C#中,索引器还支持重载。它允许我们为一个类定义多个索引器,只要它们接受不同的参数类型或参数数量。

我们可以使用下面的语法来实现索引器的重载:

public <return-type> this[<index-parameter-list>]  
{  
    // Add getter and/or setter logic here  
}  
  
public <return-type> this[<index-type-1> index1, ..., <index-type-n> indexn]  
{  
    // Add getter and/or setter logic here  
}  

第一个索引器使用单个参数来访问元素,而第二个索引器使用多个参数。在第二个索引器中,参数的数量和类型都可以不同。

示例
public class Employee
{
    private string[] empData = new string[4];

    public string this[int index]
    {
        get
        {
            if (index < 0 || index >= empData.Length)
                throw new IndexOutOfRangeException("Index out of range");
            else
                return empData[index];
        }

        set
        {
            if (index < 0 || index >= empData.Length)
                throw new IndexOutOfRangeException("Index out of range");
            else
                empData[index] = value;
        }
    }

    public string this[string index]
    {
        get
        {
            for (int i = 0; i < empData.Length; i++)
                if (empData[i] == index)
                    return empData[i];
            throw new IndexOutOfRangeException("Index out of range");
        }
    }
}

以上代码示例定义了一个Employee类,该类实现了两个索引器。第一个索引器使用int类型的索引,而第二个索引器使用string类型的索引。第一个索引器允许我们使用下标操作符[]来访问和修改对象中存储的字符串数组。第二个索引器按照索引的字符串值来查找和返回数组中的元素。

可以使用下面的语法来调用这些索引器:

// 对象初始化  
Employee emp = new Employee   
{        
    // 调用第一个索引器:   
    [0] = "Shivendra",   
    [1] = "Singh",   
    [2] = "Bisht",   
    [3] = "1989-07-15"  
};  
  
// 调用第二个索引器:  
Console.WriteLine(emp["Singh"]);  
结论

索引器超载是C#中一个强大的特性,在许多情况下都非常有用。通过这个特性,我们可以对自己定义的类实现类似于数组一样的下标访问符[]。超载索引器可以让我们更好地控制和管理类中的元素。