Я знаю C# хорошо, но это - что-то странное для меня. В некоторой старой программе я видел этот код:
public MyType this[string name]
{
......some code that finally return instance of MyType
}
Как это называют? Каково использование этого?
Это 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;
Это индексатор, обычно используемый в качестве класса типа коллекции.
Взгляните на Использование индексаторов (Руководство по программированию на C#).
Это свойство 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"];
Это специальное свойство называется Indexer. Это позволяет обращаться к вашему классу как к массиву.
myInstance[0] = val;
Чаще всего такое поведение можно увидеть в пользовательских коллекциях, так как синтаксис массива - это хорошо известный интерфейс для доступа к элементам коллекции, которые могут быть идентифицированы по ключевому значению, обычно их позиции (как в массивах и списках) или по логическому ключу (как в словарях и хэш-таблицах).
Вы можете узнать гораздо больше об индексаторах в статье MSDN Индексаторы (Руководство по программированию на C#).