Campos vs Propriedades
Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 6 de 70.
Campos são variáveis declaradas diretamente em uma classe. Propriedades são membros que fornecem acesso controlado a campos usando acessores get e set.
Campos armazenam dados diretamente
public class Person
{
// Campos - armazenamento direto de variáveis
private string name;
private int age;
}Propriedades fornecem acesso controlado com get e set
public class Person
{
private string name;
// Propriedade com campo de suporte
public string Name
{
get { return name; }
set { name = value; }
}
}Propriedades autoimplementadas (forma curta)
public class Person
{
// Propriedade autoimplementada
public string Name { get; set; }
public int Age { get; set; }
}Propriedades podem incluir lógica de validação
public class Person
{
private int age;
public int Age
{
get { return age; }
set
{
if (value >= 0 && value <= 120)
age = value;
}
}
}Propriedade somente leitura (apenas acessor get)
public class Circle
{
private double radius;
public double Radius
{
get { return radius; }
}
// Propriedade calculada somente leitura
public double Area
{
get { return Math.PI * radius * radius; }
}
}Campos são tipicamente privados e acessados por meio de propriedades. As propriedades permitem adicionar lógica, validação e controle sobre como os dados são acessados ou modificados. Propriedades autoimplementadas são convenientes quando você não precisa de lógica extra.
Desafio
MédioCrie uma classe BankAccount que demonstre a diferença entre campos e propriedades:
- Um campo privado
balancepara armazenar o saldo da conta - Uma propriedade autoimplementada
AccountName - Uma propriedade somente leitura
Balanceque retorna o campo balance - Métodos
DepositeWithdrawque modificam o campo privado
Folha de consulta
Campos são variáveis declaradas diretamente em uma classe, enquanto propriedades fornecem acesso controlado aos campos usando acessores get e set.
Campos armazenam dados diretamente:
public class Person
{
private string name;
private int age;
}Propriedades fornecem acesso controlado com get e set:
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}Propriedades autoimplementadas (forma abreviada):
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}Propriedades com lógica de validação:
public int Age
{
get { return age; }
set
{
if (value >= 0 && value <= 120)
age = value;
}
}Propriedade somente leitura (apenas acessor get):
public double Area
{
get { return Math.PI * radius * radius; }
}Campos são tipicamente privados e acessados por meio de propriedades. Propriedades permitem que você adicione lógica, validação e controle sobre como os dados são acessados ou modificados.
Experimente você mesmo
using System;
class Program
{
static void Main()
{
string accountName = Console.ReadLine();
decimal initialBalance = decimal.Parse(Console.ReadLine());
decimal depositAmount = decimal.Parse(Console.ReadLine());
BankAccount account = new BankAccount(accountName, initialBalance);
Console.WriteLine($"Account: {account.AccountName}");
Console.WriteLine($"Initial Balance: ${account.Balance}");
account.Deposit(depositAmount);
Console.WriteLine($"After Deposit: ${account.Balance}");
string result = account.Withdraw(2000);
Console.WriteLine($"Withdraw attempt: {result}");
Console.WriteLine($"Final Balance: ${account.Balance}");
}
}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