Definição - o que significa o Indexer?
Um indexador, no contexto do C #, é um membro da classe usado para fornecer recursos de indexação semelhantes a array para fácil acesso à propriedade do objeto. Um indexador é usado principalmente quando uma matriz é encapsulada em um tipo.
A sintaxe simples de um indexador ajuda os aplicativos cliente a acessar grupos de elementos como um membro de objeto de matriz (tipo, classe ou estrutura). Um indexador fornece um método indireto de inserir lógica de verificação de limite. Devido à sua natureza intuitiva, um indexador melhora a legibilidade do código.
Um indexador é freqüentemente usado para implementar uma pilha de forma que seu conteúdo possa ser acessado sem a remoção do item. A implementação do indexador Java é semelhante ao C #. Geralmente, os indexadores podem ser usados no código da biblioteca, devido à sua facilidade de uso e flexibilidade.
Definirtec explica Indexer
Embora os indexadores sejam semelhantes às propriedades, eles usam parâmetros diferentes. As propriedades são identificadas pelo nome, enquanto os indexadores são denotados pela assinatura e pelo uso da palavra-chave "this". As propriedades podem ser acessadas por meio de membros, mas os indexadores são acessados por meio de elementos. Ao contrário das propriedades, um compilador C # não permite o uso de indexador estático.
Um indexador é conveniente porque suas instâncias de classe e estrutura são indexadas como arrays e usam a notação de colchetes para acessar um elemento. Indexadores são conhecidos como matrizes inteligentes. Acessadores são os componentes do indexador get e set que permitem a busca e configuração de valor, respectivamente. Com base no tipo de membro necessário para pesquisa, um indexador é declarado com a assinatura apropriada. A palavra-chave "this" é usada para definir indexadores e "Value" é usada para atribuir o acessador de conjunto.
O tipo e os parâmetros de um indexador devem ser tão acessíveis quanto o próprio indexador. O número e os tipos de argumentos formais são conhecidos pela assinatura de um indexador, mas não pelos nomes de tipo ou argumento. O tipo de retorno deve ser um tipo C # válido. Um indexador deve ter pelo menos um parâmetro.
Os indexadores de classe podem estar sobrecarregados e ter assinaturas diferentes. Como os indexadores não são considerados variáveis, não podem ser usados como parâmetros "ref" ou "out". A linguagem cruzada usa o nome padrão Item, quando não especificado na declaração. Acessadores implementados com indexadores podem ser sobrecarregados com vários tipos. Os indexadores permitem passar mais de um parâmetro formal, como no acesso a uma matriz bidimensional. Os indexadores abstratos são implementados simplesmente declarando os acessadores get / set na classe base e adicionando o código da classe derivada.
Embora indexadores também sejam usados em interfaces, as declarações de classe são diferentes. Os acessadores do indexador de interface não usam modificadores e não têm um corpo. Indexadores também são usados em interfaces para indicar se eles são somente leitura, somente gravação ou leitura / gravação. De acordo com as diretrizes de design, a implementação da estratégia correta de tratamento de erros é crítica ao usar os acessadores get e set, além de fornecer a documentação de exceção de erro necessária para os indexadores. Restringir o acessador ao nível necessário é recomendado para evitar valores mal-intencionados. Esta definição foi escrita no contexto de C #