猿教程 Logo

C# 索引器

索引器是一种特殊类型的属性,它允许以与内部集合数组相同的方式访问类或结构。 它与属性相同,但它使用带有方括号和参数的此关键字定义。

索引器语法:

Publicthis[index]
{
    Get{
        // return the value from the specified index
    }
    Set{
        // set values at the specified index
    }
}

以下示例显示如何在自定义类中使用索引器。

相关实例:

class StringDataStore
{
    
    private string[] strArr = new string[10]; // internal data storage

    public StringDataStore()
    {

    }

    public string this[int index]
    {
        get
        {
            if (index < 0 &&  index >= strArr.Length)
                throw new IndexOutOfRangeException("Cannot store more than 10 objects");

            return strArr[index];
        }

        set
        {
            if (index < 0 &&  index >= strArr.Length)
                throw new IndexOutOfRangeException("Cannot store more than 10 objects");

            strArr[index] = value;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        StringDataStore strStore = new StringDataStore();

        strStore[0] = "One";
        strStore[1] = "Two";
        strStore[2] = "Three";
        strStore[3] = "Four";
        
        for(int i = 0; i < 10 ; i++)
            Console.WriteLine(strStore[i]);
    }
}

运行结果:

One
Two
Three
Four

在上面的例子中,StringDataStore类为其内部字符串数组实现了一个索引器。 所以现在,StringDataStore的对象可以像数组一样用于添加或检索字符串数据。 我们在上面的例子中使用了字符串数组,你也可以根据你的要求使用任何集合类型。


覆盖索引器

您可以通过具有不同的索引类型来覆盖索引器。 以下示例显示索引器可以是int类型以及字符串类型。

相关实例:

class StringDataStore
{
    
    private string[] strArr = new string[10]; // internal data storage

    public StringDataStore()
    {

    }

    public string this[int index]
    {
        get
        {
            if (index < 0 &&  index >= strArr.Length)
                throw new IndexOutOfRangeException("Cannot store more than 10 objects");

            return strArr[index];
        }

        set
        {
            if (index < 0 &&  index >= strArr.Length)
                throw new IndexOutOfRangeException("Cannot store more than 10 objects");

            strArr[index] = value;
        }
    }

    public string this[string name]
    {
        get
        {
            foreach (string str in strArr){
                    if(str.ToLower() == name.ToLower())        
                        return str;
                    }
                    
                return null;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        StringDataStore strStore = new StringDataStore();

        strStore[0] = "One";
        strStore[1] = "Two";
        strStore[2] = "Three";
        strStore[3] = "Four";
        
        Console.WriteLine(strStore["one"]);
        Console.WriteLine(strStore["two"]);
        Console.WriteLine(strStore["Three"]);
        Console.WriteLine(strStore["FOUR"]);
    }
}

运行结果:

One
Two
Three
Four

在VisualStudio中插入索引器的代码片段

Vsual studio提供了快捷方式来为索引器插入代码片段,以便您不必手动编写整个语法。 要在Visual Studio中为索引器插入代码段,请写入idexer并按Tab键,或者右键单击(或Ctrl + K,S) - >选择“插入代码段...” - >选择“Visual C# 索引器“。


重点
  1. 索引器与属性相同,除了它使用带有带有参数的方括号的此关键字定义。

  2. 索引器可以通过具有不同类型的参数来覆盖。

  3. 不支持使用索引器的引用和输出参数。

  4. 可以包括索引器作为接口成员。

  5. 使用代码片段在visual studio中自动插入索引器语法。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CSharp/csharp-index.html