The 'this' keyword as a property

2019-01-14 22:20发布

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?

4条回答
祖国的老花朵
2楼-- · 2019-01-14 22:48

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;
查看更多
Deceive 欺骗
3楼-- · 2019-01-14 22:50

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"];
查看更多
小情绪 Triste *
4楼-- · 2019-01-14 22:50

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

查看更多
做自己的国王
5楼-- · 2019-01-14 22:50

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

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

查看更多
登录 后发表回答