Voltando de onde paramos, veja o exemplo a seguir, que contém a propriedade que define um valor chamado PrecoDeVenda, que não pode ser negativo. Perceba que temos um campo privado, que internamente, irá armazenar o valor da propriedade em questão:
private decimal _precoVenda;
public decimal PrecoVenda
{
get { return _precoVenda; }
set
{
if (value < 0)
{
throw new Exception("Preço não pode ser negativo!");
}
else
{
_precoVenda = value;
}
}
}
Se uma propriedade contém apenas o método get, ela poderá apenas ser lida. É considerada readonly (somente-leitura):
public decimal PrecoVenda
{
get { return 500; }
}
Da mesma forma, se ela tem apenas o método set, ela apenas poderá ser gravada. É considerada somente-gravação:
private decimal _precoVenda;
public decimal PrecoVenda
{
set { _precoVenda = value; }
}
Observação: como Boas Práticas de Desenvolvimento, existe uma diferenciação no que diz a respeito à letra inicial dos campos e das propriedades: os campos e as propriedades públicas devem iniciar em maiúscula; já os campos e as propriedades privadas, devem iniciar em minúscula.
Indexadores – Podemos definir os indexadores como sendo uma combinação de array uma propriedade. Eles são vistos como ideais para tipos que ocultam coleções, em que se adiciona uma funcionalidade a mais ao tipo que argumenta a coleção. Ao usar indexadores, podemos tratar instâncias da mesma maneira que tratamos arrays. Por se tratar de uma propriedade sem nome, os indexadores são tidos como uma propriedade padrão.
Veja abaixo as semelhanças e diferenças entre indexadores e propriedades:
· Os indexadores podem ser sobrecarregados, sobrescritos e adicionados a interfaces;
· Eles suportam os modificadores de acesso padrão;
· Eles não podem ser um membro estático;
· Eles não possuem nome e são associados com a referência this;
· Os parâmetros de indexadores são índices; as propriedades não possuem índices;
· Na classe base, acessamos os indexadores como base[indices]. Por outro lado, uma propriedade semelhante é acessada como base.Property.
Veja agora as diferenças e semelhanças entre indexadores e arrays e a sintaxe de um indexador:
· Os indexadores são acessados por meio de índices;
· Eles suportam índices não-numéricos, enquanto que os arrays suportam apenas valores integrais;
· Os indexadores usam um armazenamento de dados separado. Um array, por sua vez, é o próprio “armazenador” desses dados;
· Eles podem executar validação de dados, sendo que esta tarefa não pode ser usada com um array.
Modificador_De_Acesso Tipo this[parametros]
{
get
{
//Bloco de código de leitura
}
set
{
//Bloco de código de escrita
}
}
Pra simplificar, considere o seguinte exemplo:
class Capitais
{
public string this[string siglaEstado]
{
get
{
switch (siglaEstado)
{
case "SP": return "São Paulo";
case "RJ": return "Rio de Janeiro";
case "MG": return "Minas Gerais";
}
return siglaEstado;
}
}
}
class Program
{
static void Main(string[] args)
{
Capitais objCapitais = new Capitais();
Console.WriteLine("A Capital é: " + objCapitais["SP"]);
Console.ReadKey();
}
}
Perceba que o uso do indexador se assemelha ao uso do Array, abordada em artigos recentes.
Fonte de Consulta: Apostila de C#, da Impacta Tecnologia.
Assim finalizo o artigo. Muito obrigado a todos!
Um abraço, e até o próximo artigo.
Wellington Balbo de Camargo