C# POO Básico
Propriedades
Em C#, uma propriedade é um membro que fornece acesso flexível a um campo, usando os acessadores get e set. Ela parece um campo para quem usa, mas internamente pode conter lógica. Isso permite validar valores, calcular resultados ou controlar a mutabilidade.
As auto-properties são a forma mais simples: o compilador cria um campo privado implícito. Você pode inicializá-las diretamente ou no construtor. Já o acessador init permite que a propriedade seja definida apenas durante a inicialização do objeto, garantindo imutabilidade após a construção.
As propriedades calculadas não armazenam valor; seu get (e opcionalmente set) é uma expressão que deriva de outros membros. São úteis para expor informações derivadas sem duplicar dados.
Neste card, você verá como declarar e usar esses quatro recursos, que são a base do encapsulamento em C#.
Pontos-chave
- Propriedades usam
getpara leitura esetpara escrita, podendo conter validação. - Auto-properties (
{ get; set; }) geram um campo de apoio automaticamente. - O acessador
initpermite atribuir valor apenas na criação do objeto. - Propriedades calculadas não armazenam estado; retornam uma expressão.
- Você pode controlar a visibilidade de
getesetseparadamente.
using System;
public class Produto
{
// Auto-property com init: só pode ser definida na criação
public string Nome { get; init; }
// Propriedade com validação no set
private decimal _preco;
public decimal Preco
{
get => _preco;
set
{
if (value < 0)
throw new ArgumentException("Preço não pode ser negativo");
_preco = value;
}
}
// Propriedade calculada: não armazena valor
public decimal PrecoComDesconto => _preco * 0.9m;
// Construtor para inicializar Nome (init)
public Produto(string nome)
{
Nome = nome;
}
}
public class Program
{
public static void Main()
{
var p = new Produto("Caneta") { Preco = 10.0m };
Console.WriteLine($"Produto: {p.Nome}");
Console.WriteLine($"Preço: {p.Preco:C}");
Console.WriteLine($"Com desconto: {p.PrecoComDesconto:C}");
// p.Nome = "Lápis"; // Erro: init só permite na inicialização
// p.Preco = -5; // Lança exceção
}
}