-
Coleção do processo de implementação do indexador em C#
Um dos aspectos mais interessantes da linguagem C# é o indexador de classes. Simplificando, o chamado indexador é um tipo especial de atributo por meio do qual você pode referenciar sua própria classe como um array. Obviamente, esse recurso é particularmente útil ao criar classes de coleção, mas em outras situações, como processar arquivos grandes ou abstrair certos recursos limitados, é claro que também é muito útil ter um comportamento semelhante a um array em uma classe. Este artigo orientará você na configuração de uma classe para usar um indexador. Mas primeiro, vamos delinear o conceito de propriedades para fornecer algumas informações básicas necessárias.
Propriedades Se você já escreveu um programa em VB6, então deve estar familiarizado com os métodos de propriedade. Os chamados métodos de propriedade são, na verdade, membros de classe especiais que implementam acesso controlado a campos de classe privada. Existem dois métodos de atributos na linguagem C#. Um é get, por meio do qual o valor do campo privado pode ser retornado, e o segundo é set, por meio do qual o valor do campo privado pode ser definido. Por exemplo, tomando o código a seguir como exemplo, uma propriedade FirstName é criada para controlar o acesso ao nome do membro da classe privada:
classe Pessoa {
nome da string privada;
string pública Nome {
obtenha {return primeiro nome;}
definir {nome = valor;}
}
}
As declarações de propriedade podem ser codificadas da seguinte forma:
Pessoa p = new Pessoa();
p.PrimeiroNome = "Lamont";
Console.WriteLine (p.PrimeiroNome);
Como você pode ver, a declaração de atributos é mais parecida com uma declaração de domínio, exceto que também declara dois membros especiais, que segundo a Microsoft são os chamados acessadores. A função get access é chamada quando uma propriedade é chamada no lado direito de uma expressão ou quando a propriedade é usada como parâmetro de outra sub-rotina (ou função). Por outro lado, a função de acesso set é chamada quando a propriedade é chamada no lado esquerdo da expressão e o valor do campo privado é definido passando implicitamente o parâmetro value. Você pode criar propriedades somente leitura omitindo a função de acessador set, de modo que qualquer tentativa de definir a propriedade gerará um erro de compilação.
Benefícios de usar indexadores
Abaixo está sua estrutura
<modificador> <tipo de retorno> esta [lista de argumentos]
...{
pegar
...{
// Obtenha os códigos aqui
}
definir
...{
// Definir códigos vai aqui
}
}
Observação:
modificador: modificador, como privado, público, protegido ou interno
this: Esta é uma palavra-chave especial em C#, que representa a instância atual da classe de referência. Aqui significa o índice da classe atual.
lista de argumentos: refere-se aos parâmetros do indexador.
Depois de conversar muito, vamos voltar ao assunto, então por que tenho que andar neste círculo? Na verdade, isso ocorre porque o indexador de uma classe é muito parecido com uma propriedade, e isso também ocorre do ponto de vista do código. Aqui está um exemplo de classe com um indexador que retorna uma string:
classe Amostra {
string pública este [índice int] {
get {return "Você passou " + índice };
}
}
Observe que o nome do atributo aqui é este, que se refere à instância atual da classe, e a lista de parâmetros está entre colchetes em vez de parênteses. Além disso, este é um indexador somente leitura. Para alterá-lo para o tipo leitura/gravação, adicionei uma função de acesso definida. Ao definir um indexador, você não usa necessariamente apenas um parâmetro. Os parâmetros do indexador podem ser de qualquer tipo, mas int geralmente é o tipo mais razoável. Também é possível ter mais de um indexador (sobrecarregado) na mesma classe.
Após definir a classe Sample conforme acima, podemos usar o indexador como atributo padrão, conforme mostrado abaixo:
Amostra s = new Amostra();
Console.WriteLine(s[55]);
Propriedades e indexadores Existem diversas diferenças entre propriedades e indexadores:
Cada atributo da classe deve ter um nome exclusivo e cada indexador definido na classe deve ter uma assinatura ou lista de parâmetros exclusiva (para que a sobrecarga do indexador possa ser implementada).
As propriedades podem ser estáticas e os indexadores devem ser membros da instância.
As funções de acesso definidas para indexadores têm acesso aos parâmetros passados ao indexador, enquanto as funções de acesso à propriedade não possuem parâmetros.
O comportamento semelhante a uma matriz das interfaces é frequentemente preferido pelos implementadores de programas, portanto, você também pode definir indexadores para a interface. Ambas as interfaces de coleção IList e IDictionary declaram indexadores para acessar seus itens armazenados.
Ao declarar um indexador para uma interface, lembre-se que a declaração indica apenas a existência do indexador. Você só precisa fornecer as funções de acesso apropriadas, sem incluir modificadores de escopo. O código a seguir declara o indexador como parte da interface IImplementMe:
interface IIimplementMe {
string this[índice int]
{
pegar;
definir;
}
A classe implementada correspondente deve definir especificamente as funções de acesso get e set para o indexador de IimplementMe.
Essa é uma visão geral básica dos indexadores. Agora você deve ter uma melhor compreensão do papel que os indexadores desempenham no seu desenvolvimento.
classe SampleCollection<T>
{
privado T[] arr = novo T[100];
público T isto[int i]
{
pegar
{
retornar arr[i];
}
definir
{
arr[i] = valor;
}
}
}
// Esta classe mostra como o código do cliente usa o indexador
programa de aula
{
vazio estático principal(string[] args)
{
SampleCollection<string> stringCollection = new SampleCollection<string>();
stringCollection[0] = "Olá, Mundo";
System.Console.WriteLine(stringCollection[0]);
}
}
Este artigo vem do blog CSDN. Por favor, indique a fonte ao reimprimir: http://blog.csdn.net/licheng19891020/archive/2009/12/09/4974516.aspx .
-