Campo vs Propiedad en C#
Este tutorial explicará la diferencia entre campos y propiedades en clases en C#. Para ilustrar mejor esto, primero debe conocer los siguientes conceptos.
¿Qué es una clase?
Una clase es una colección de miembros de datos que le permite crear sus tipos personalizados al actuar como un plano o una plantilla para sus objetos. Dentro de una clase, los campos y las propiedades son similares en el sentido de que pueden almacenar datos, pero la diferencia radica en cómo deben usarse.
¿Qué es un campo?
Un campo
guarda los datos como una variable. Se puede hacer público y luego acceder a través de la clase, pero es una buena práctica limitar y ocultar la mayor cantidad de datos posible. Esto le brinda más control y evita errores inesperados al garantizar que la única forma en que una persona puede acceder a los datos es utilizando uno de los métodos públicos de la clase.
¿Qué es una propiedad?
Una propiedad expone campos. Usar las propiedades en lugar de los campos directamente proporciona un nivel de abstracción en el que puede cambiar los campos sin afectar la forma externa en que acceden los objetos que usan su clase. Las propiedades también le permiten hacer cálculos antes de establecer el valor del campo o garantizar datos válidos.
Ejemplo:
using System;
namespace FieldProperty_Sample {
class Program {
static void Main(string[] args) {
// Initialize a new Tutorial_Class
Tutorial_Class tutorial = new Tutorial_Class();
// Set the field values through its public property
tutorial.Name = "Sample Tutorial";
tutorial.Created_Date = new DateTime(2021, 12, 31);
tutorial.Description = "Sample Description";
// Print the class values to the console
Console.WriteLine("Tutorial Name: " + tutorial.Name);
Console.WriteLine("Created Date: " + tutorial.Created_Date.ToShortDateString());
Console.WriteLine("Sample Description: " + tutorial.Description);
Console.ReadLine();
}
public class Tutorial_Class {
// These are the private fields that are only accessible by the class
// The actual data is stored here and can be retrieved/set by the properties
private string name;
private DateTime created_date;
// All of the items below are properties that have the power to get and set the field values
public string Name {
get { return name; }
set { name = value; }
}
public DateTime Created_Date {
get { return created_date; }
set { created_date = value; }
}
// This is another kind of property, an AutoProperty
// It acts the same as the original property but does not require you to declare the private
// field The private field is automatically generated for you
public string Description { get; set; }
}
}
}
En el ejemplo anterior, tenemos una clase de muestra que usa campos, propiedades y AutoProperties. Después de inicializar una instancia de Tutorial_Class, establecemos los valores usando las propiedades públicas de la clase. Puede tener en cuenta que si intenta acceder a los campos directamente, obtendrá un error Program.Tutorial_Class.x is inaccessible due to its protection level
. Finalmente, imprimimos los valores en la consola para mostrar que se han realizado los cambios.
Producción :
Tutorial Name: Sample Tutorial
Created Date: 31/12/2021
Sample Description: Sample Description