Resumo : neste tutorial, você aprenderá como usar o indexador C# para tornar um objeto indexado como um array.
Introdução ao indexador C#
Um índice permite que um objeto de uma classe seja indexado como um array . Para definir um indexador para uma classe, use a seguinte sintaxe:
class MyClass
{
public type this[int index]
{
get { // return a value }
set { // assing a value }
}
}
Linguagem de código: C# ( cs )
A sintaxe de um indexador é como uma propriedade , exceto que seu acessador recebe um parâmetro:
- Primeiro, defina o
type
valor de retorno. - Segundo, defina o indexador usando a
this
palavra-chave use. - Terceiro, defina um parâmetro do indexador. O parâmetro não precisa ser um número inteiro. O tipo do parâmetro depende de como você projeta o mecanismo de pesquisa. Além disso, um indexador pode ter mais de um parâmetro.
- Por fim, defina os acessadores
get
eset
. Oget
acessador retorna um valor enquanto oset
acessador atribui um valor. Se o indexador não tiver oset
acessador, será um indexador somente leitura.
Observe que os indexadores podem estar sobrecarregados. Em outras palavras, uma classe pode ter vários indexadores.
Se você omitir o set
acessador, o indexador se tornará somente leitura. Nesse caso, você pode usar a sintaxe incorporada à expressão para encurtar sua definição:
class MyClass
{
public type this[int index] => returnValue;
}
Linguagem de código: C# ( cs )
Observe que você não precisa usar a get
palavra-chave.
A partir do C# 7, você pode usar sintaxe com corpo de expressão para ambos get
e set
acessadores. No entanto, você precisa usar as palavras-chave get
e set
neste caso:
class MyClass
{
public type this[int i]
{
get => member[i];
set => member[i] = value;
}
}
Linguagem de código: C# ( cs )
Exemplos de indexador C#
Vejamos alguns exemplos de uso de indexadores.
1) Exemplo de indexador somente leitura C#
Suponha que você tenha uma frase como a seguinte:
"C# is awesome"
Linguagem de código: C# ( cs )
E você deseja acessar cada palavra da frase usando um índice. Por exemplo:
sentence[0]
Linguagem de código: C# ( cs )
Deve retornar a primeira palavra ( C#
), não o primeiro caractere ( C
):
"C#"
Linguagem de código: C# ( cs )
Para fazer isso, você pode definir uma nova classe e usar um indexador.
Primeiro, crie um novo arquivo chamado Sentence.cs
.
Segundo, defina a Sentence
classe no Sentence.cs
arquivo:
// Sentence.cs
class Sentence
{
private string[] words;
public Sentence(string s)
{
words = s.Split(' ');
}
}
Linguagem de código: C# ( cs )
O Sentence()
construtor divide uma string de entrada pelo espaço em palavras e atribui o resultado ao words
campo.
Terceiro, defina um indexador na Sentence
classe:
// Sentence.cs
class Sentence
{
private string[] words;
public Sentence(string s)
{
words = s.Split(' ');
}
public string this[int index]
{
get
{
return words[index];
}
}
}
Linguagem de código: C# ( cs )
Neste exemplo, o indexador retorna a palavra da frase com base em um índice.
A seguir ilustra como usar o indexador do objeto da frase:
// Program.cs
var sentence = new Sentence("C# is awesome");
Console.WriteLine(sentence[0]);
Console.WriteLine(sentence[1]);
Console.WriteLine(sentence[2]);
Linguagem de código: C# ( cs )
Saída:
C#
is
awesome
Linguagem de código: C# ( cs )
Como o indexador na Sentence
classe é somente leitura, você pode encurtá-lo usando a sintaxe incorporada à expressão como esta:
// Sentence.cs
class Sentence
{
private string[] words;
public Sentence(string s)
{
words = s.Split(' ');
}
public string this[int index] => words[index];
}
Linguagem de código: C# ( cs )
2) Exemplo de indexador C# com acessadores set e get
O exemplo a seguir define a classe Matrix
que usa um array multidimensional como campo e um indexador para acessar seus elementos:
// Matrix.cs
class Matrix
{
private double[,] data;
public Matrix(int row, int column)
{
data = new double[row, column];
}
public double this[int row, int column]
{
get { return data[row, column]; }
set { data[row, column] = value; }
}
}
Linguagem de código: JavaScript ( javascript )
Agora, você pode usar o objeto da Matrix como um array como este:
// Program.cs
var matrix = new Matrix(3,3);
for (int row = 0; row < 3; row++)
{
for (int column = 0; column < 3; column++)
{
matrix[row, column] = row + column;
}
}
for (int row = 0; row < 3; row++)
{
for (int column = 0; column < 3; column++)
{
Console.Write($"{matrix[row, column]} ");
}
Console.WriteLine();
}
Linguagem de código: JavaScript ( javascript )
Saída:
0 1 2
1 2 3
2 3 4
Observe que você pode usar a sintaxe incorporada à expressão para os acessadores get
e set
do indexador.
Resumo
- Use o indexador C# para permitir que um objeto seja indexado como uma matriz.