
Indexadores em C# (Como funcionam para desenvolvedores)
Um indexador em C# é um tipo especial de propriedade que permite que instâncias de uma classe ou estrutura sejam acessadas usando o operador de acesso a array []. Os indexadores podem ser muito úteis na criação de "matrizes inteligentes" ou no encapsulamento de dados em uma sintaxe simplificada. Elas fornecem uma maneira de usar instâncias de uma classe da mesma forma que você usaria arrays, onde você pode acessar os dados por meio de um índice. Este artigo explorará como declarar e usar indexadores em C# com exemplos práticos. E também exploraremos a biblioteca IronPDF no final do artigo.
Sintaxe básica do indexador
Um indexador é um membro de instância usando a palavra-chave this em uma classe ou estrutura, seguido pela declaração do indexador. Você também especifica os tipos de parâmetros e o tipo de retorno. A sintaxe geral para um membro de instância de indexador é a seguinte:
public return_type this[parameter_type index]
{
get
{
// Code to return data
}
set
{
// Code to set data
}
}Default Public Property Item(ByVal index As parameter_type) As return_type
Get
' Code to return data
End Get
Set(ByVal value As return_type)
' Code to set data
End Set
End PropertyAqui, return_type é o tipo de valor que o indexador retornará, como um valor inteiro, e parameter_type é o tipo do índice, frequentemente um int. O acessor get retorna o valor no índice especificado, e o acessor de bloco de código set atribui um valor a esse índice.
Declaração e uso do indexador
Vamos examinar uma ilustração básica de como implementar um indexador dentro de uma classe C#. Considere uma classe Program que encapsula um array de strings.
class Program
{
private string[] values = new string[5]; // Array with 5 elements
public string this[int index]
{
get
{
return values[index];
}
set
{
values[index] = value;
}
}
}Friend Class Program
Private values(4) As String ' Array with 5 elements
Default Public Property Item(ByVal index As Integer) As String
Get
Return values(index)
End Get
Set(ByVal value As String)
values(index) = value
End Set
End Property
End ClassNo código acima:
- A classe
Programcontém um array de strings chamadovalues. - O
string this[int index]é a declaração do indexador, onde oint indexé a propriedade parametrizada pelo índice usada para acessar elementos do array. - O acessor
getretorna o valor indexado no índice especificado, e o acessorsetatribui um valor indexado a esse índice.
Isso significa que você pode criar uma instância da classe Program e acessar seu array values usando o indexador, assim:
class Program
{
static void Main()
{
Program program = new Program();
// Set values using indexer
program[0] = "First";
program[1] = "Second";
// Access values using indexer
Console.WriteLine(program[0]); // Output: First
Console.WriteLine(program[1]); // Output: Second
}
}Friend Class Program
Shared Sub Main()
Dim program As New Program()
' Set values using indexer
program(0) = "First"
program(1) = "Second"
' Access values using indexer
Console.WriteLine(program(0)) ' Output: First
Console.WriteLine(program(1)) ' Output: Second
End Sub
End ClassNeste código, você vê que o indexador fornece uma sintaxe simples para acessar o array values, semelhante a como você acessaria elementos em um array.
Compreendendo os Acessores get e set
Os acessores get e set dentro do indexador são como blocos de código que permitem que você recupere e atribua dados de maneira semelhante a como faria com propriedades. A principal diferença é que os indexadores usam um parâmetro de índice para trabalhar com coleções de dados em vez de membros de dados individuais.
O bloco get é responsável por retornar os dados no índice especificado, enquanto o bloco set atribui dados ao índice especificado. Aqui está outro exemplo para consolidar seu entendimento:
class StudentRecords
{
private string[] studentNames = new string[3];
public string this[int index]
{
get
{
if (index >= 0 && index < studentNames.Length)
{
return studentNames[index];
}
return "Invalid Index";
}
set
{
if (index >= 0 && index < studentNames.Length)
{
studentNames[index] = value;
}
}
}
public int Length
{
get { return studentNames.Length; }
}
}Friend Class StudentRecords
Private studentNames(2) As String
Default Public Property Item(ByVal index As Integer) As String
Get
If index >= 0 AndAlso index < studentNames.Length Then
Return studentNames(index)
End If
Return "Invalid Index"
End Get
Set(ByVal value As String)
If index >= 0 AndAlso index < studentNames.Length Then
studentNames(index) = value
End If
End Set
End Property
Public ReadOnly Property Length() As Integer
Get
Return studentNames.Length
End Get
End Property
End ClassNeste exemplo:
- A classe
StudentRecordstem um vetorstring[] studentNamesprivado que contém os nomes dos alunos. - O indexador verifica se o índice está dentro dos limites da matriz antes de definir ou recuperar o valor.
- Uma propriedade de tipo
intLengthfornece acesso ao comprimento do array.
Você pode usar esta classe no método Main da seguinte maneira:
class Program
{
public static void Main()
{
StudentRecords records = new StudentRecords();
// Set values using indexer
records[0] = "John";
records[1] = "Jane";
records[2] = "Bob";
// Access values using indexer
for (int i = 0; i < records.Length; i++)
{
Console.WriteLine(records[i]);
}
}
}Friend Class Program
Public Shared Sub Main()
Dim records As New StudentRecords()
' Set values using indexer
records(0) = "John"
records(1) = "Jane"
records(2) = "Bob"
' Access values using indexer
For i As Integer = 0 To records.Length - 1
Console.WriteLine(records(i))
Next i
End Sub
End ClassCriando um Indexador Genérico
Você também pode criar classes genéricas com indexadores, permitindo que seu código manipule vários tipos de dados. Aqui está um exemplo simples de uma classe genérica com um indexador genérico:
class GenericClass<t>
{
private T[] elements = new T[5];
public T this[int index]
{
get
{
return elements[index];
}
set
{
elements[index] = value;
}
}
public int Length
{
get { return elements.Length; }
}
}Option Strict On
Option Infer On
Public Class GenericClass(Of T)
Private elements As T() = New T(4) {}
Default Public Property Item(index As Integer) As T
Get
Return elements(index)
End Get
Set(value As T)
elements(index) = value
End Set
End Property
Public ReadOnly Property Length As Integer
Get
Return elements.Length
End Get
End Property
End ClassNeste código:
- A classe GenericClass define um indexador que pode trabalhar com qualquer tipo de dado.
- O indexador
this[int index]permite que você acesse os elementos no array, independentemente do tipo.
Agora você pode usar o GenericClass com diferentes tipos de dados no método Main:
class Program
{
public static void Main()
{
GenericClass<int> intArray = new GenericClass<int>();
intArray[0] = 10;
intArray[1] = 20;
GenericClass<string> stringArray = new GenericClass<string>();
stringArray[0] = "Hello";
stringArray[1] = "World";
// Output the integer array values
for (int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
// Output the string array values
for (int i = 0; i < stringArray.Length; i++)
{
Console.WriteLine(stringArray[i]);
}
}
}Friend Class Program
Public Shared Sub Main()
Dim intArray As New GenericClass(Of Integer)()
intArray(0) = 10
intArray(1) = 20
Dim stringArray As New GenericClass(Of String)()
stringArray(0) = "Hello"
stringArray(1) = "World"
' Output the integer array values
For i As Integer = 0 To intArray.Length - 1
Console.WriteLine(intArray(i))
Next i
' Output the string array values
For i As Integer = 0 To stringArray.Length - 1
Console.WriteLine(stringArray(i))
Next i
End Sub
End ClassUsando IronPDF com o Indexador C#

IronPDF é uma biblioteca C# projetada para gerar, editar e converter PDFs em aplicações .NET . Simplifica o trabalho com PDFs para desenvolvedores, permitindo criar PDFs a partir de HTML , manipular arquivos PDF e lidar com funcionalidades avançadas, como mesclagem, impressão e adição de assinaturas, de forma programática.
Você pode aproveitar o IronPDF em seus programas C# que utilizam indexadores para gerar e gerenciar conteúdo PDF dinamicamente. Por exemplo, suponha que você tenha uma classe que armazena strings HTML e queira gerar PDFs para cada entrada HTML usando um indexador. Essa abordagem simplifica a geração de PDFs, mantendo seu código organizado e intuitivo.
using IronPdf;
using System;
class PdfGenerator
{
private string[] htmlTemplates = new string[3];
public string this[int index]
{
get { return htmlTemplates[index]; }
set { htmlTemplates[index] = value; }
}
public void GeneratePdf(int index, string outputPath)
{
var renderer = new ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(this[index]); // Access HTML string using indexer
pdfDocument.SaveAs(outputPath);
}
}
class Program
{
public static void Main()
{
PdfGenerator pdfGen = new PdfGenerator();
// Populate HTML templates
pdfGen[0] = "<h1>First Document</h1><p>This is the first PDF.</p>";
pdfGen[1] = "<h1>Second Document</h1><p>This is the second PDF.</p>";
pdfGen[2] = "<h1>Third Document</h1><p>This is the third PDF.</p>";
// Generate PDFs using the indexer
pdfGen.GeneratePdf(0, "first.pdf");
pdfGen.GeneratePdf(1, "second.pdf");
pdfGen.GeneratePdf(2, "third.pdf");
Console.WriteLine("PDFs generated successfully.");
}
}Imports IronPdf
Imports System
Friend Class PdfGenerator
Private htmlTemplates(2) As String
Default Public Property Item(ByVal index As Integer) As String
Get
Return htmlTemplates(index)
End Get
Set(ByVal value As String)
htmlTemplates(index) = value
End Set
End Property
Public Sub GeneratePdf(ByVal index As Integer, ByVal outputPath As String)
Dim renderer = New ChromePdfRenderer()
Dim pdfDocument = renderer.RenderHtmlAsPdf(Me(index)) ' Access HTML string using indexer
pdfDocument.SaveAs(outputPath)
End Sub
End Class
Friend Class Program
Public Shared Sub Main()
Dim pdfGen As New PdfGenerator()
' Populate HTML templates
pdfGen(0) = "<h1>First Document</h1><p>This is the first PDF.</p>"
pdfGen(1) = "<h1>Second Document</h1><p>This is the second PDF.</p>"
pdfGen(2) = "<h1>Third Document</h1><p>This is the third PDF.</p>"
' Generate PDFs using the indexer
pdfGen.GeneratePdf(0, "first.pdf")
pdfGen.GeneratePdf(1, "second.pdf")
pdfGen.GeneratePdf(2, "third.pdf")
Console.WriteLine("PDFs generated successfully.")
End Sub
End Class
Conclusão
Os indexadores em C# são um recurso útil que ajuda a fazer com que suas classes e structs se comportem como arrays. Ao fornecer uma sintaxe simplificada e acesso flexível aos dados, você pode criar um código mais intuitivo e legível. Quer você esteja trabalhando com strings, números inteiros ou qualquer outro tipo de dado, os indexadores permitem encapsular sua estrutura de dados e acessá-la de forma limpa e eficiente usando índices.
O IronPDF facilita o início com um período de teste gratuito que lhe dá acesso a todos os recursos necessários para criar, manipular e renderizar PDFs. Você pode levar o tempo que precisar explorando o software, e uma vez que estiver satisfeito, as licenças estão disponíveis a partir de $999.

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.
Artigos relacionados


