views:

140

answers:

4

I know c# well, but it is something strange for me. In some old program, I have seen this code:

public MyType this[string name]
{
    ......some code that finally return instance of MyType
}

How it is called? What is the use of this?

+14  A: 

It is indexer. After you declared it you can do like this:

class MyClass
{
    Dictionary<string, MyType> collection;
    public MyType this[string name]
    {
        get { return collection[name]; }
        set { collection[name] = value; }
    }
}

// Getting data from indexer.
MyClass myClass = ...
MyType myType = myClass["myKey"];

// Setting data with indexer.
MyType anotherMyType = ...
myClass["myAnotherKey"] = anotherMyType;
Andrew Bezzub
This answer would be more complete if you showed the property get (and/or set) accessor in your "....some code" block. This suggests it's more like a method.
Reed Copsey
Thanks, I've updated the answer.
Andrew Bezzub
And made much much less common by having built in generic collections that cover most folks' needs. No need to write your own strongly typed collections to get standard behavior anymore.
Jim Leonardo
+4  A: 

This is an Indexer Property. It allows you to "access" your class directly by index, in the same way you'd access an array, a list, or a dictionary.

In your case, you could have something like:

public class MyTypes
{
    public MyType this[string name]
    {
        get {
            switch(name) {
                 case "Type1":
                      return new MyType("Type1");
                 case "Type2":
                      return new MySubType();
            // ...
            }
        }
    }
}

You'd then be able to use this like:

MyTypes myTypes = new MyTypes();
MyType type = myTypes["Type1"];
Reed Copsey
A: 

its an indexer generally used a collection type class.

have a look at this:

http://msdn.microsoft.com/en-us/library/2549tw02.aspx

Hath
+2  A: 

This is a special property called an Indexer. This allows your class to be accessed like an array.

myInstance[0] = val;

You'll see this behaviour most often in custom collections, as the array-syntax is a well known interface for accessing elements in a collection which can be identified by a key value, usually their position (as in arrays and lists) or by a logical key (as in dictionaries and hashtables).

You can find out much more about indexers in the MSDN article Indexers (C# Programming Guide).

Programming Hero