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