关于简单索引器的问题(c#)

时间:2009-07-29 23:30:17

标签: c# .net

在以下索引器代码块中,我们为什么需要:

public string this[int pos]
{
    get
    {
        return myData[pos];
    }
    set
    {
        myData[pos] = value;
    }
}

这个[int pos]中的“this”到底是做什么的?感谢

/// Indexer Code Block starts here
using System;

/// <summary>
///     A simple indexer example.
/// </summary>
class IntIndexer
{
    private string[] myData;

    public IntIndexer(int size)
    {
        myData = new string[size];

        for (int i = 0; i < size; i++)
        {
            myData[i] = "empty";
        }
    }

    public string this[int pos]
    {
        get
        {
            return myData[pos];
        }
        set
        {
            myData[pos] = value;
        }
    }

    static void Main(string[] args)
    {
        int size = 10;

        IntIndexer myInd = new IntIndexer(size);

        myInd[9] = "Some Value";
        myInd[3] = "Another Value";
        myInd[5] = "Any Value";

        Console.WriteLine("\nIndexer Output\n");

        for (int i = 0; i < size; i++)
        {
            Console.WriteLine("myInd[{0}]: {1}", i, myInd[i]);
        }
    }
}

6 个答案:

答案 0 :(得分:4)

这意味着您可以在对象本身上使用索引器(就像数组一样)。

class Foo
{
    public string this[int i]
    {
        get { return someData[i]; }
        set { someData i = value; }
    }
}

// ... later in code

Foo f = new Foo( );
string s = f[0];

答案 1 :(得分:3)

从c#语法角度来看:

您需要this因为 - 您还会如何声明它?类的功能必须具有引用它的名称或地址。

方法签名是:

[modifiers] [type]   [name]    (parameters)

public      string   GetString (Type myparam);

属性签名是:

[modifiers] [type]   [name]

public      string   MyString

字段签名是:

[modifiers] [type]   [name]

public      string   MyString

由于索引器没有名称,所以写下来没有多大意义:

public string [int pos]

因此我们使用this来表示它的“名称”。

答案 2 :(得分:2)

这只是编译器知道该属性具有索引器语法的标记。

在这种情况下,它使myInd能够使用“数组语法”(例如myInd [9])。

答案 3 :(得分:0)

'this'关键字表示您正在定义在访问类时将调用的行为,就像它是一个数组一样。由于您为类实例定义了行为,因此在该上下文中使用'this'关键字是有意义的。你没有调用myInd.indexer [],你调用myInd []。

答案 4 :(得分:0)

它允许您的类以与数组类似的方式运行。在这种情况下,您的索引器允许您从IntIndexer类外部透明地引用myData。

如果您没有声明索引器,则以下代码将失败:

myInd[1] = "Something";

答案 5 :(得分:0)

您的案例中的“this”指定此属性是此类的indexer。这是C#中用于在类上定义索引器的语法,因此您可以像以下一样使用它:

myInd[9] = ...