C# Language
Indexer
Sök…
Syntax
- public ReturnTyp detta [IndexType-index] {get {...} set {...}}
Anmärkningar
Indexer tillåter array-liknande syntax att få åtkomst till en egenskap hos ett objekt med ett index.
- Kan användas i en klass, struktur eller gränssnitt.
- Kan överbelastas.
- Kan använda flera parametrar.
- Kan användas för att komma åt och ställa in värden.
- Kan använda valfri typ för sitt index.
En enkel indexerare
class Foo
{
private string[] cities = new[] { "Paris", "London", "Berlin" };
public string this[int index]
{
get {
return cities[index];
}
set {
cities[index] = value;
}
}
}
Användande:
var foo = new Foo();
// access a value
string berlin = foo[2];
// assign a value
foo[0] = "Rome";
Indexer med två argument och gränssnitt
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;
}
}
}
Överbelastning av indexeraren för att skapa en SparseArray
Genom att överbelasta indexeraren kan du skapa en klass som ser ut och känns som en matris men inte är det. Det kommer att ha O (1) get and set-metoder, har åtkomst till ett element på index 100, och ändå har storleken på elementen inuti det. SparseArray-klassen
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow