Question: in the following indexer code block, why do we need:

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

```

what exactly does "this" in this[int pos] do? Thanks

```
/// 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]);
        }
    }
}

```

Answer: 
**From a c# syntax perspective:**

You need `this` because - how else would you declare it? Functionality on a class must have a name, or address, by which to reference it.

A method signature is:

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

public      string   GetString (Type myparam);

```

A property signature is:

```
[modifiers] [type]   [name]

public      string   MyString

```

A field signature is:

```
[modifiers] [type]   [name]

public      string   MyString

```

Since an indexer has no name, it would not make much sense to write:

```
public string [int pos]

```

So we use `this` to denote it's "name".
It means that you can use the indexer on the object itself (like an array).

```
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];

```