The 'this' keyword as a property

2019-01-14 22:17发布

问题:

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 is it called? What is the use of this?

回答1:

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;


回答2:

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


回答3:

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).



回答4:

It's an indexer, generally used as a collection type class.

Have a look at Using Indexers (C# Programming Guide).