Saltar al pie de página
Iron Academy Logo
Aprender C#
Aprender C#

Otras categorías

Comprender las propiedades de C#

Tim Corey
9m 50s

C# 11, introducido con .NET 7, ha aportado una interesante novedad a las propiedades: la palabra clave requerida. En este artículo, exploraremos las propiedades de C#, utilizando ejemplos del conciso tutorial en vídeo de Tim Corey sobre ".NET 7 Update: Propiedades necesarias en 10 minutos o menos". Desglosaremos todo, desde los conceptos básicos de las propiedades hasta la nueva palabra clave required y cómo ayuda a aplicar las reglas de inicialización.

Propiedades de C

En C#, las propiedades permiten encapsular campos y gestionar el acceso a los miembros de datos de la clase de un objeto. Se utilizan habitualmente para garantizar la integridad de los datos y permitir el acceso externo. Un campo privado puede encapsularse mediante propiedades, lo que permite controlar cómo se accede a los datos o cómo se modifican. Las propiedades públicas de cadena suelen utilizar métodos especiales denominados accesores (get y set) para manipular los miembros de la clase de forma eficaz. En C# se puede acceder a una propiedad estática sin instanciar la clase, lo que ofrece una forma única de gestionar los valores de las propiedades.

A continuación, Tim presenta un sencillo ejemplo de una propiedad.

Creación de una aplicación de consola

En primer lugar, Tim comienza con una aplicación básica de consola .NET 7 utilizando C# 11. Esta versión introduce la palabra clave requerida, que no está disponible en versiones anteriores de .NET.

Definición de un modelo sencillo

Tim crea una clase PersonModel con propiedades para FirstName y LastName:

public class PersonModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
public class PersonModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Estas propiedades permiten que PersonModel almacene nombres y apellidos. Sin embargo, sin una configuración adicional, FirstName y LastName podrían potencialmente quedar sin inicializar, lo que llevaría a valores nulos.

Uso de constructores para garantizar la inicialización

Una forma habitual de garantizar que las propiedades se inicialicen siempre es mediante un constructor. En el ejemplo de Tim, añade un constructor a la clase base de PersonModel que requiere tanto FirstName como LastName:

public PersonModel(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
}
public PersonModel(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
}

Este enfoque impone que siempre que se cree un objeto PersonModel, se deben proporcionar tanto FirstName como LastName. Si intentáramos crear un PersonModel sin especificar estos valores, el compilador lo marcaría como un error.

Contexto anulable

A partir de .NET 6 y C# 10, C# introdujo tipos de referencia anulables. Esto significa que las propiedades deben ser inicializadas o marcadas explícitamente como anulables usando un ?. Por ejemplo, si FirstName y LastName pueden ser nulos, los definiríamos de la siguiente manera:

public string? FirstName { get; set; }
public string? LastName { get; set; }
public string? FirstName { get; set; }
public string? LastName { get; set; }

En el ejemplo de Tim, sin embargo, asumimos que FirstName y LastName deben ser siempre no nulos. Inicialmente, la anulabilidad se gestionaba mediante una inicialización cuidadosa o anotaciones anulables, pero con C# 11 disponemos de opciones más sólidas.

Presentación de la palabra clave deseada

Aunque los constructores pueden imponer la inicialización, C# 11 introduce la palabra clave required, lo que facilita asegurar que se establezcan propiedades específicas. Con required, puedes marcar propiedades individuales como requeridas, lo que significa que deben asignarse un valor durante la inicialización del objeto.

Configuración de las propiedades necesarias

Para hacer que FirstName y LastName sean propiedades requeridas, Tim a las 4:15 modifica la clase PersonModel de la siguiente manera:

public class PersonModel
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}
public class PersonModel
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}

Al marcar estas propiedades con required, el compilador ahora impondrá que se establezcan ya sea a través de un inicializador de objeto o un constructor. Esto es útil porque permite requerir propiedades específicas sin necesidad de crear un constructor.

Ejemplo de uso con propiedades requeridas

Ahora, podemos crear e inicializar PersonModel de la siguiente manera:

PersonModel person = new() { FirstName = "Tim", LastName = "Corey" };
PersonModel person = new() { FirstName = "Tim", LastName = "Corey" };

Si omitimos FirstName o LastName, el compilador señalará un error, instándonos a inicializar estas propiedades requeridas.

Uso requerido con Constructores

Tim demuestra un caso donde se utilizan tanto propiedades required como constructores. En situaciones en las que se tiene un constructor que establece propiedades requeridas, C# necesita asegurarse de que esas propiedades siguen inicializadas cuando se llama al constructor.

En tales casos, se puede usar el atributo SetsRequiredMembers para señalar que el constructor cumple con las condiciones requeridas. Así es como Tim lo aplica:

[SetsRequiredMembers]
public PersonModel()
{
    FirstName = "Test";
    LastName = "Test";
}

[SetsRequiredMembers]
public PersonModel(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
}
[SetsRequiredMembers]
public PersonModel()
{
    FirstName = "Test";
    LastName = "Test";
}

[SetsRequiredMembers]
public PersonModel(string firstName, string lastName)
{
    FirstName = firstName;
    LastName = lastName;
}

Agregar SetsRequiredMembers informa al compilador que estas propiedades se establecerán dentro del constructor, evitando errores de inicialización. Esta característica ayuda a evitar omisiones accidentales al tiempo que permite flexibilidad en la forma en que se inicializan las propiedades.

Por qué son útiles las propiedades requeridas

Tim explica que la nueva palabra clave required simplifica el proceso de asegurar que las propiedades siempre se establezcan. En lugar de necesitar constructores para el método set en todos los casos o arriesgarse a que las propiedades no se establezcan, ahora disponemos de una forma sencilla de requerir valores específicos directamente en la declaración de propiedades.

Esta función destaca en los modelos de datos en los que ciertos campos son obligatorios y puede ayudar a detectar problemas en una fase temprana del proceso de desarrollo al evitar errores nulos en tiempo de ejecución.

Ejemplo de propiedades adicionales

Tim luego añadió una propiedad opcional, Email, que puede ser anulable:

public string? Email { get; set; }
public string? Email { get; set; }

Debido a que no está marcada con required, la propiedad Email puede permanecer sin establecer sin causar un error del compilador. Con este ejemplo, Tim demostró la flexibilidad que permite una clase con una clara distinción entre campos de datos esenciales y opcionales.

Conclusión

La adición de propiedades requeridas en C# 11 es una característica valiosa para los desarrolladores, ya que garantiza que las propiedades esenciales se inicialicen siempre. El vídeo de Tim Corey ofrece una excelente introducción a esta función y demuestra cómo funciona dentro de una aplicación de consola. Al combinar la palabra clave required con inicializadores de objeto y constructores, podemos crear modelos de datos más robustos y seguros en C#. Si desea ver más tutoriales informativos, visite el canal de YouTube de Tim YouTube Channel.

Hero Worlddot related to Comprender las propiedades de C#
Hero Affiliate related to Comprender las propiedades de C#

Gana más compartiendo lo que te gusta

¿Creas contenidos para desarrolladores que trabajan con .NET, C#, Java, Python o Node.js? ¡Convierte tu experiencia en un ingreso extra!

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame