Подтвердить что ты не робот

Ключевое слово 'this' как свойство

Я хорошо знаю С#, но для меня это что-то странное. В какой-то старой программе я видел этот код:

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

Как это называется? Какая польза от этого?

4b9b3361

Ответ 1

Это indexer. После того, как вы его объявили, вы можете сделать следующее:

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

Это Свойство индексатора. Он позволяет вам "получить доступ" к вашему классу напрямую по индексу, так же, как вы получите доступ к массиву, списку или словарю.

В вашем случае у вас может быть что-то вроде:

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

Тогда вы сможете использовать это как:

MyTypes myTypes = new MyTypes();
MyType type = myTypes["Type1"];

Ответ 3

Это специальное свойство, называемое Indexer. Это позволяет получить доступ к вашему классу, как массив.

myInstance[0] = val;

Такое поведение чаще всего вызывается в пользовательских коллекциях, так как синтаксис массива является хорошо известным интерфейсом для доступа к элементам в коллекции, которые могут быть идентифицированы с помощью значения ключа, обычно их положения (как в массивах и списках) или логическим ключом (как в словарях и хэш-таблицах).

Вы можете узнать гораздо больше об индексаторах в статье MSDN Indexers (Руководство по программированию на С#).