Domine Propriedades em C#: Transforme e Organize Seu Código

As propriedades em C# são uma das formas mais eficientes e elegantes de gerenciar o acesso e a modificação de dados em uma classe. Elas substituem o uso direto de campos privados (ou _fields_), que podem facilmente se tornar desorganizados e difíceis de manter. Ao utilizar propriedades, você ganha controle total sobre como os dados são lidos e escritos, garantindo segurança🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real., flexibilidade e clareza no código. Se você quer manter seu código organizado, protegido contra inconsistências e fácil de utilizar, dominar as propriedades é essencial.

Tabela de Conteúdo🔗

1. Por Que Usar Propriedades?

2. Propriedades Automáticas: Simplicidade e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Rapidez

3. Propriedades com get📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. set Personalizados

4. Modificadores de Acesso em Propriedades

5. Expression-Bodied Properties: Elegância em Uma Linha

6. Init-Only Setters (C# 9+)

7. Propriedades Somente Leitura (Read-Only)

8. Validação com Propriedades: Diga Não ao Dados Inválidos!

9. Propriedades Computadas: Quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. o Valor é uma Fórmula Mágica

10. Exemplo Prático📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.: Classe "Usuário" com Propriedades Profissionais

11. Dicas e Boas Práticas🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados.

Por Que Usar Propriedades?🔗

No C#, as propriedades são fundamentais para garantir que seus objetos mantenham valores🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. coerentes e sejam fáceis de manter. Se você expõe um campo (field) publicamente, qualquer código externo pode alterar seu valor🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. sem restrições, o que pode levar a inconsistências. Com propriedades, você tem controle total:

Imagine uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. de conta bancária onde você não quer permitir que o saldo seja alterado para um valor negativo sem passar por uma validação. Propriedades permitem encapsular essa regra de negócio de forma clara e segura.

Propriedades Automáticas: Simplicidade e Rapidez🔗

Quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. você não precisa de validação ou processamento adicional antes de armazenar um valor, as propriedades automáticas são a solução ideal. Elas permitem declarar a propriedade sem a necessidade de criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. um campo privado explicitamente - o compilador faz isso para você nos bastidores.

Exemplo:

public class Cliente
{
    public string Nome { get; set; }
    public int Idade { get; set; }
}

Neste caso, Nome e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Idade não exigem lógica adicional, então📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. a sintaxe curta das propriedades automáticas é perfeita.

Vantagens:

Propriedades com get e set Personalizados🔗

Para cenários📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. onde você precisa de lógica específica, como validação, cálculo ou transformações antes de armazenar ou expor um valor, use propriedades com blocos get📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. set completos.

Exemplo: Vamos garantir que a idade nunca seja negativa, definindo-a como zero se um valor🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. negativo for fornecido.

public class Pessoa
{
    private int _idade;  // campo privado
    public int Idade
    {
        get
        {
            return _idade;
        }
        set
        {
            if (value < 0)
            {
                _idade = 0;
            }
            else
            {
                _idade = value;
            }
        }
    }
}

Aqui, precisamos de um campo privado (_idade) para armazenar o valor🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. internamente, já que estamos fazendo uma verificação antes de gravar.

Quando usar:

  • Validação ou ajustes antes de escrever.
  • Cálculos ou formatações especiais antes de ler.

Modificadores de Acesso em Propriedades🔗

Outra grande vantagem das propriedades é a capacidade de controlar o acesso ao get📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. set separadamente. Por exemplo, em uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. de conta bancária, você pode permitir que o saldo seja lido publicamente, mas apenas métodos🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. internos possam alterá-lo:

public class ContaBancaria
{
    public ContaBancaria(decimal saldoInicial)
    {
        Saldo = saldoInicial;
    }
    public decimal Saldo { get; private set; }
    public void Depositar(decimal valor)
    {
        Saldo += valor;
    }
    public bool Sacar(decimal valor)
    {
        if (valor <= Saldo)
        {
            Saldo -= valor;
            return true;
        }
        return false;
    }
}

Observe que o get📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. é público, mas📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. o set é privado (private set). Isso significa que apenas métodos🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. dentro da classe podem alterar o valor de Saldo, enquanto🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! qualquer código externo pode apenas lê-lo.

Expression-Bodied Properties: Elegância em Uma Linha🔗

Se a lógica do get📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. ou set for🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! simples, você pode usar a sintaxe expression-bodied para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! deixar o código mais compacto. Por exemplo:

public class Produto
{
    private decimal _precoUnitario;
    private int _quantidadeEmEstoque;
    public decimal ValorTotal => _precoUnitario * _quantidadeEmEstoque;
}

Aqui, ValorTotal🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. é uma propriedade somente leitura que calcula o valor🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. total do estoque. A sintaxe => torna o código mais limpo e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. direto.

Init-Only Setters (C# 9+)🔗

Desde o C# 9, é possível criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. propriedades com init; em vez de set;. Isso permite definir o valor apenas durante a inicialização do objeto (no construtor🔑 Construtores: Inicialize Objetos como um Arquiteto de OOP!🔑 Construtores: Inicialize Objetos como um Arquiteto de OOP!Descubra como os construtores em C# estruturam objetos, garantindo inicialização segura e promovendo boas práticas de desenvolvimento orientado a objetos. ou em um inicializador de objeto), mas não depois. É uma ótima forma de criar objetos imutáveis📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. sem precisar de múltiplos construtores🔑 Construtores: Inicialize Objetos como um Arquiteto de OOP!🔑 Construtores: Inicialize Objetos como um Arquiteto de OOP!Descubra como os construtores em C# estruturam objetos, garantindo inicialização segura e promovendo boas práticas de desenvolvimento orientado a objetos..

Exemplo:

public class Endereco
{
    public string Rua { get; init; }
    public string Cidade { get; init; }
}

Podemos fazer:

var meuEndereco = new Endereco
{
    Rua = "Rua das Flores, 123",
    Cidade = "São Paulo"
};
// Depois de criado, não podemos mudar `Rua` ou `Cidade`.

Isso deixa claro que, uma vez “montado” o objeto, seus valores🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. não podem mais ser alterados.

Propriedades Somente Leitura (Read-Only)🔗

Se você precisa apenas retornar um valor e não quer que ele seja alterado (nem mesmo durante a inicialização), pode criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. uma propriedade _somente leitura_. Basta não incluir o set. Exemplo:

public class Pedido
{
    private decimal _valorTotal;
    public decimal ValorTotal
    {
        get { return _valorTotal; }
    }
    public void AdicionarItem(decimal preco)
    {
        _valorTotal += preco;
    }
}

Aqui, ValorTotal🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. pode ser atualizado internamente pelos métodos🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. de Pedido, mas📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. de fora é apenas leitura. Isso reforça o encapsulamento🔒 Encapsulamento: Proteja Seus Dados como um Banco Suíço!🔒 Encapsulamento: Proteja Seus Dados como um Banco Suíço!Aprenda a proteger seus dados com encapsulamento em C#: técnicas e melhores práticas para um código seguro, modular e eficiente. do comportamento.

Validação com Propriedades: Diga Não aos Dados Inválidos!🔗

Adicione regras de negócio diretamente nos setters para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! garantir que os dados estejam sempre corretos:

private int _idade;
public int Idade
{
    get => _idade;
    set
    {
        if (value < 0 || value > 150)
            throw new ArgumentException("Idade inválida!");
        _idade = value;
    }
}

Dica profissional: Use nameof() para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! mensagens de erro dinâmicas:

throw new ArgumentException($"{nameof(Idade)} deve ser entre 0 e 150.");

Propriedades Computadas: Quando o Valor é uma Fórmula Mágica🔗

Crie valores🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. dinâmicos sem armazenamento, usando propriedades computadas:

public decimal TotalCompra => Itens.Sum(item => item.Preco * item.Quantidade);

Quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. usar:

✅ Valores derivados de outros dados ✅ Cálculos simples (evite operações pesadas!)

Exemplo Prático: Classe "Usuário" com Propriedades Profissionais🔗

Vamos criar uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. Usuario que utiliza várias técnicas de propriedades:

public class Usuario
{
    // Auto-propriedade com valor padrão
    public string Nome { get; set; } = "Convidado";
    // Propriedade com validação
    private string _email;
    public string Email
    {
        get => _email;
        set
        {
            if (!value.Contains("@"))
                throw new ArgumentException("E-mail inválido!");
            _email = value;
        }
    }
    // Propriedade computada
    public string Saudacao => $"Olá, {Nome}! Seu e-mail é {Email}";
    // Propriedade init-only
    public DateTime DataCriacao { get; init; } = DateTime.UtcNow;
}
// Uso:
var usuario = new Usuario
{
    Nome = "Carlos",
    Email = "[email protected]"
};
Console.WriteLine(usuario.Saudacao); // "Olá, Carlos! Seu e-mail é [email protected]"

Checklist de Elegância:

✅ Sem campos privados expostos ✅ Validações centralizadas ✅ Código autoexplicativo ✅ Imutabilidade onde necessário

Dicas e Boas Práticas🔗

No final, o uso de propriedades é tudo uma questão de controle e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. organização. Se você adotar boas práticas🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. desde cedo, evitará dores de cabeça no futuro, quando precisar refatorar ou expandir o código. A ideia é não deixar campos privados soltos por aí - use as propriedades com sabedoria e consiga um código limpo, fácil de ler e de dar manutenção. 🎩✨

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados