开发者

The 'this' keyword as a property

开发者 https://www.devze.com 2022-12-25 03:10 出处:网络
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]

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 finall开发者_运维问答y return instance of MyType
}

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


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;


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


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


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

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号