C# Language
Индексатор
Поиск…
Синтаксис
- public ReturnType this [IndexType index] {get {...} set {...}}
замечания
Indexer позволяет синтаксису типа массива получить доступ к свойству объекта с индексом.
- Может использоваться для класса, структуры или интерфейса.
- Может быть перегружен.
- Может использовать несколько параметров.
- Может использоваться для доступа и установки значений.
- Может использовать любой тип для своего индекса.
Простой индексатор
class Foo
{
private string[] cities = new[] { "Paris", "London", "Berlin" };
public string this[int index]
{
get {
return cities[index];
}
set {
cities[index] = value;
}
}
}
Использование:
var foo = new Foo();
// access a value
string berlin = foo[2];
// assign a value
foo[0] = "Rome";
Indexer с двумя аргументами и интерфейсом
interface ITable {
// an indexer can be declared in an interface
object this[int x, int y] { get; set; }
}
class DataTable : ITable
{
private object[,] cells = new object[10, 10];
/// <summary>
/// implementation of the indexer declared in the interface
/// </summary>
/// <param name="x">X-Index</param>
/// <param name="y">Y-Index</param>
/// <returns>Content of this cell</returns>
public object this[int x, int y]
{
get
{
return cells[x, y];
}
set
{
cells[x, y] = value;
}
}
}
Перегрузка индексатора для создания SparseArray
Перегружая индексатор, вы можете создать класс, который выглядит и выглядит как массив, но это не так. Он будет иметь методы O (1) get и set, может получить доступ к элементу с индексом 100 и все же иметь размер элементов внутри него. Класс SparseArray
class SparseArray
{
Dictionary<int, string> array = new Dictionary<int, string>();
public string this[int i]
{
get
{
if(!array.ContainsKey(i))
{
return null;
}
return array[i];
}
set
{
if(!array.ContainsKey(i))
array.Add(i, value);
}
}
}
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow