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 allows your class to behave in a similar manner to an array. In this case, your indexer is allowing you to reference myData transparently from outside the IntIndexer class.

If you didn't have the indexer declared, the following code would fail:

```
myInd[1] = "Something";

```