Campos vs Propiedades
Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 6 de 70.
Los campos son variables declaradas directamente en una clase. Las propiedades son miembros que proporcionan acceso controlado a los campos utilizando los accesores get y set.
Los campos almacenan datos directamente
public class Person
{
// Campos - almacenamiento directo de variables
private string name;
private int age;
}Las propiedades proporcionan acceso controlado con get y set
public class Person
{
private string name;
// Propiedad con campo de respaldo
public string Name
{
get { return name; }
set { name = value; }
}
}Propiedades autoimplementadas (forma abreviada)
public class Person
{
// Propiedad autoimplementada
public string Name { get; set; }
public int Age { get; set; }
}Las propiedades pueden incluir lógica de validación
public class Person
{
private int age;
public int Age
{
get { return age; }
set
{
if (value >= 0 && value <= 120)
age = value;
}
}
}Propiedad de solo lectura (solo el accesor get)
public class Circle
{
private double radius;
public double Radius
{
get { return radius; }
}
// Propiedad calculada de solo lectura
public double Area
{
get { return Math.PI * radius * radius; }
}
}Los campos suelen ser privados y se accede a ellos a través de propiedades. Las propiedades le permiten agregar lógica, validación y control sobre cómo se accede a los datos o cómo se modifican. Las propiedades autoimplementadas son convenientes cuando no se necesita lógica adicional.
Desafío
IntermedioCrea una clase BankAccount que demuestre la diferencia entre campos y propiedades:
- Un campo privado
balancepara almacenar el saldo de la cuenta - Una propiedad autoimplementada
AccountName - Una propiedad de solo lectura
Balanceque devuelve el campo balance - Métodos
DeposityWithdrawque modifican el campo privado
Hoja de referencia
Los campos son variables declaradas directamente en una clase, mientras que las propiedades proporcionan acceso controlado a los campos mediante los accesores get y set.
Los campos almacenan datos directamente:
public class Person
{
private string name;
private int age;
}Las propiedades proporcionan acceso controlado con get y set:
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}Propiedades autoimplementadas (forma abreviada):
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}Propiedades con lógica de validación:
public int Age
{
get { return age; }
set
{
if (value >= 0 && value <= 120)
age = value;
}
}Propiedad de solo lectura (solo accesor get):
public double Area
{
get { return Math.PI * radius * radius; }
}Los campos suelen ser privados y se accede a ellos a través de propiedades. Las propiedades permiten añadir lógica, validación y control sobre cómo se accede a los datos o cómo se modifican.
Pruébalo tú mismo
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 lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosNamespaces y directivasIntro a clases y objetosLa palabra clave 'this'Métodos y parámetrosCampos vs PropiedadesConstructoresInicializadores de objetosResumen - Calculadora simple4Herencia
Sintaxis básica de herencia (:)La palabra clave 'base'Palabras clave Virtual y OverrideClases selladas (Sealed)La clase base 'object'Resumen: Jerarquía de empleados7Características avanzadas
Sobrecarga de operadoresIndexadores (this[])Sobrescritura de ToString()Métodos de extensiónResumen - Lista personalizada10Patrones de diseño - Parte 1
Introducción a los patrones de diseñoSingleton Thread-SafePatrón FactoryPatrón Observer (Eventos)Patrón Strategy2Propiedades y miembros estáticos
Propiedades autoimplementadasPropiedades de solo lectura y escrituraCampos y métodos estáticosClases estáticasMiembros con cuerpo de expresión5Polimorfismo e Interfaces
Polimorfismo: Compilación vs. EjecuciónInterfaz vs. Clase AbstractaInterfaces MúltiplesInterfaces ExplícitasUpcasting y DowncastingRepaso: Calculadora de Figuras8Conceptos avanzados de POO
Composición sobre herenciaGenéricos (clases y métodos)Delegados y eventosAtributos y ReflexiónIDisposable y la sentencia usingFundamentos de Inyección de dependencias11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Arquitectura de clases
Datos de instancia vs. estáticosPalabras clave 'readonly' y 'const'Campos de respaldoResumen - Gestor de cuentas bancarias6Encapsulamiento
Modificadores de accesoPropiedades para el encapsulamientoImplementación de ocultamiento de datosPatrones de inmutabilidadRepaso - Registros de estudiantes