Propriedades Autoimplementadas
Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 10 de 70.
Propriedades autoimplementadas permitem que você declare propriedades sem escrever campos de suporte (backing fields) explícitos. O compilador cria um campo privado oculto automaticamente nos bastidores.
Em vez de escrever este código verboso:
public class Product
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}Você pode simplesmente escrever:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
}Você também pode definir valores padrão diretamente na declaração:
public class Product
{
public string Name { get; set; } = "Unnamed";
public decimal Price { get; set; } = 0.0m;
public bool IsAvailable { get; set; } = true;
}Propriedades autoimplementadas são ideais quando você não precisa de validação ou lógica personalizada no getter ou setter. Elas mantêm suas classes limpas e reduzem significativamente o código boilerplate.
Desafio
FácilVamos construir um sistema de inventário simples usando propriedades autoimplementadas para acompanhar os itens em uma loja.
Você criará dois arquivos para organizar seu código:
Item.cs: Defina uma classeItemno namespaceInventorycom propriedades autoimplementadas paraName(string),Price(decimal) eInStock(bool). Defina valores padrão:Namedeve ter como padrão"Unknown",Pricecomo0.0meInStockcomotrue.Program.cs: No seu arquivo principal, crie dois objetosItemusando inicializadores de objeto. Leia o nome e o preço de cada item a partir da entrada e, em seguida, imprima os detalhes de cada item.
Você receberá quatro entradas:
- Nome do primeiro item
- Preço do primeiro item
- Nome do segundo item
- Preço do segundo item
Imprima cada item neste formato:
Item: {Name}, Price: {Price}, In Stock: {InStock}Por exemplo, se as entradas forem Laptop, 999.99, Mouse e 25.50, a saída deve ser:
Item: Laptop, Price: 999.99, In Stock: True
Item: Mouse, Price: 25.50, In Stock: TrueFolha de consulta
Propriedades autoimplementadas permitem que você declare propriedades sem escrever campos de suporte (backing fields) explícitos. O compilador cria automaticamente um campo privado oculto.
Sintaxe básica:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
}Definindo valores padrão:
public class Product
{
public string Name { get; set; } = "Unnamed";
public decimal Price { get; set; } = 0.0m;
public bool IsAvailable { get; set; } = true;
}Propriedades autoimplementadas são ideais quando você não precisa de validação ou lógica personalizada no getter ou setter.
Experimente você mesmo
using System;
using Inventory;
class Program
{
public static void Main(string[] args)
{
// Lê as entradas para o primeiro item
string name1 = Console.ReadLine();
decimal price1 = Convert.ToDecimal(Console.ReadLine());
// Lê as entradas para o segundo item
string name2 = Console.ReadLine();
decimal price2 = Convert.ToDecimal(Console.ReadLine());
// TODO: Criar dois objetos Item usando inicializadores de objeto
// Define as propriedades Name e Price a partir dos valores de entrada
// TODO: Imprimir os detalhes de cada item no formato:
// Item: {Name}, Price: {Price}, In Stock: {InStock}
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosNamespaces e DiretivasIntrodução a Classes e ObjetosA Palavra-chave 'this'Métodos e ParâmetrosCampos vs PropriedadesConstrutoresInicializadores de ObjetosRecapitulação - Calculadora Simples4Herança
Sintaxe Básica de Herança (:)A Palavra-chave 'base'Palavras-chave Virtual e OverrideClasses SeladasA Classe Base 'object'Recapitulação - Hierarquia de Funcionários7Recursos Avançados
Sobrecarga de OperadoresIndexadores (this[])Sobrescrita de ToString()Métodos de ExtensãoRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoSingleton Thread-SafePadrão FactoryPadrão Observer (Eventos)Padrão Strategy2Propriedades e Membros Estáticos
Propriedades AutoimplementadasPropriedades de Apenas Leitura/EscritaCampos e Métodos EstáticosClasses EstáticasMembros com Corpo de Expressão5Polimorfismo e Interfaces
Polimorfismo: Compilação vs ExecuçãoInterface vs Classe AbstrataMúltiplas InterfacesInterfaces ExplícitasUpcasting e DowncastingRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição sobre HerançaGenerics (Classes e Métodos)Delegates e EventosAtributos e ReflectionIDisposable e a Instrução usingFundamentos de Injeção de Dependência11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Arquitetura de Classes
Dados de Instância vs EstáticosPalavras-chave 'readonly' e 'const'Campos de SuporteRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Modificadores de AcessoPropriedades para EncapsulamentoImplementação de Ocultação de DadosPadrões de ImutabilidadeRecapitulação - Registros de Estudantes9Argumentos Variáveis
A Palavra-chave 'params'Parâmetros OpcionaisArgumentos NomeadosSobrecarga de Métodos