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

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

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

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

17
задан Peter Mortensen 24 June 2017 в 20:41
поделиться

4 ответа

Это 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;
31
ответ дан 30 November 2019 в 11:26
поделиться

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

Взгляните на Использование индексаторов (Руководство по программированию на C#).

0
ответ дан 30 November 2019 в 11:26
поделиться

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

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

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"];
7
ответ дан 30 November 2019 в 11:26
поделиться

Это специальное свойство называется Indexer. Это позволяет обращаться к вашему классу как к массиву.

myInstance[0] = val;

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

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

2
ответ дан 30 November 2019 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: