Las clases, estructuras y registros son conceptos fundamentales en la programación en C#. Cada uno es de un tipo diferente, con diferentes características, capacidades y limitaciones. Para hacer las cosas más confusas, tienen rasgos y características en común. Las clases son tipos de referencia que brindan soporte para conceptos útiles orientados a objetos como encapsulación, herencia y polimorfismo. Las estructuras son tipos de valores que ofrecen un mejor rendimiento pero tienen limitaciones en términos de tamaño y mutabilidad. Los registros, que se introdujeron en C# 9, combinan lo mejor de clases y estructuras, con soporte para inmutabilidad de forma predeterminada. ¿Cuándo debería utilizar estructuras o registros en lugar de clases en su aplicación? En este artículo examinaremos las diferencias entre clases, estructuras y tipos de registros y cómo deberíamos trabajar con estos diferentes tipos en C#. Cree un proyecto de aplicación de consola en Visual Studio En primer lugar, creemos un proyecto de aplicación de consola .NET Core en Visual Studio. . Suponiendo que Visual Studio 2022 esté instalado en su sistema, siga los pasos que se describen a continuación para crear un nuevo proyecto de aplicación de consola .NET Core. Inicie el IDE de Visual Studio. Haga clic en «Crear nuevo proyecto». En la ventana «Crear nuevo proyecto», seleccione «Aplicación de consola (.NET Core)» de la lista de plantillas que se muestran. Haga clic en Siguiente. En la ventana «Configura tu nuevo proyecto», especifica el nombre y la ubicación del nuevo proyecto. Haga clic en Siguiente. En la ventana «Información adicional» que se muestra a continuación, elija «.NET 8.0 (soporte a largo plazo)» como versión del marco. Deje sin marcar las casillas de verificación «No usar declaraciones de nivel superior» y «Habilitar publicación AOT nativa». No usaremos esas características aquí. Haga clic en Crear. Usaremos este proyecto de aplicación de consola .NET 8 para trabajar con ejemplos. de clases, estructuras y registros en las secciones siguientes de este artículo.Usar clases en C#Una clase en C# es un tipo de referencia. En otras palabras, una variable de un tipo de clase contiene una referencia a un objeto. Tenga en cuenta que puede tienen múltiples referencias que apuntan al mismo objeto (por lo que modificar el objeto a través de una referencia cambiará su valor para otras). Los miembros de una clase (es decir, sus campos, propiedades, métodos, eventos, etc.) definen el comportamiento y el estado. de las instancias de la clase. Las clases en C# admiten abstracción, encapsulación, herencia y polimorfismo. Estos son los cuatro principios básicos de la programación orientada a objetos. El siguiente fragmento de código muestra la sintaxis para definir una clase en C#. clase
{ //Miembros de datos y funciones miembro }El siguiente fragmento de código ilustra una clase típica de C#.public class Autor { public int Id { get; colocar; } cadena pública Nombre { get; colocar; } cadena pública Apellido { get; colocar; } dirección de cadena pública { get; colocar; } cadena pública Correo electrónico { get; colocar; } cadena pública Teléfono { get; colocar; } }El siguiente fragmento de código muestra cómo puede crear una instancia de la clase Autor y establecer valores para cada una de sus propiedades.var autor = nuevo Autor() { Id = 1, Nombre = «Joydip», Apellido = «Kanjilal», Dirección = » Hyderabad, Imdia», Email = «joydipkanjilal@yahoo.com», Phone = «1234567890» };Uso de estructuras en C#Una estructura en C# es un tipo de valor. Una variable de un tipo de estructura contiene una instancia del tipo (no una referencia). Puede utilizar estructuras en C# para crear pequeños tipos de datos compuestos y, al mismo tiempo, evitar la sobrecarga de recolección de basura. Las estructuras también se pueden hacer inmutables, usando el modificador de solo lectura. Tenga en cuenta que las instancias de estructuras se pasan por valor cuando las usa como parámetro de método. Del mismo modo, cuando asigna una variable de estructura a otra variable de estructura, se copia su valor. Si bien puede usar campos, propiedades y métodos en una estructura, no puede implementar conceptos orientados a objetos como abstracción, encapsulación, herencia y polimorfismo usando una estructura. El siguiente fragmento de código muestra la sintaxis para definir una estructura en C#. estructura
{ //Miembros de datos y funciones miembro }El siguiente fragmento de código ilustra una struct.struct Coordinate típica { public int x; público int y; }Ahora puede utilizar el siguiente fragmento de código para crear una instancia de esta estructura e inicializar sus miembros de datos. Punto de coordenadas = nueva Coordenada(); punto.x = 10; point.y = 20;Uso de registros en C# Los tipos de registros se introdujeron en C# 9 para representar valores inmutables. Los registros son tipos de referencia como las clases, pero tienen una semántica de igualdad basada en valores de forma predeterminada, como las estructuras. Puede usar tipos de registros en C# para crear tipos inmutables y objetos seguros para subprocesos. Los registros proporcionan funciones integradas útiles, como una expresión with para crear un nuevo registro con datos modificados y un descriptor de acceso init para establecer valores para sus propiedades solo en el momento de la inicialización. Los tipos de registros pueden tener propiedades, campos, métodos, eventos y constructores, y brindan soporte limitado para la herencia. Sin embargo, no admiten abstracción, encapsulación ni polimorfismo. Puede aprovechar los tipos de registro para representar objetos de transferencia de datos (DTO), así como otras estructuras de datos que requieren semántica de inmutabilidad e igualdad. Considere el siguiente código que muestra un C# clase llamada Rectángulo.clase pública Rectángulo { public int Longitud { get; colocar; } public int Amplitud { get; colocar; } }Puedes representar los mismos datos usando un tipo de registro de una manera mucho más simple:registro público Rectángulo(int Longitud, int Ancho);Ahora puedes crear una instancia del tipo de registro Rectángulo usando el siguiente código.var rectángulo = nuevo Rectángulo (10, 5);Usar herencia en tipos de registro en C# Un tipo de registro en C# puede heredar de otro tipo de registro, pero no puede heredar de una clase. El siguiente fragmento de código muestra cómo un tipo de registro puede extender otro tipo de registro en C#.public record Person(string FirstName, string LastName, string Address) { } public record Author(int id, string LastBookAuthored, string FirstName, string LastName, string Address ) : Persona (Nombre, Apellido, Dirección) { public int Id { get; colocar; } cadena pública LastBookAuthored { get; colocar; } }Ahora puede crear una instancia del tipo de registro usando el siguiente código.var autor = nuevo Autor(1, «Mastering C# 8.0», «Joydip», «Kanjilal», «Hyderabad, India»);Clases vs. estructuras vs. registros en C#Use clases para representar lógica y comportamiento complejos en su aplicación. Las clases fueron diseñadas para modelar estructuras de datos complejas que requieren conceptos orientados a objetos como abstracción, encapsulación, composición, herencia y polimorfismo. Sin embargo, las clases tienen ciertos inconvenientes de rendimiento que debe tener en cuenta al diseñar sus aplicaciones. Los tipos de valores (estructuras) son mucho más rentables en términos de asignación y desasignación de memoria que los tipos de referencia (clases y registros). Cuando desee crear un tipo de datos compuesto con solo unos pocos miembros de datos, una estructura es una buena opción. Las estructuras son ideales para estructuras de datos pequeñas (de menos de 16 bytes de tamaño) que requieren semántica de valores. El uso de una estructura en tales casos le ayudará a evitar los costos de recolección de basura y los gastos generales relacionados. Los tipos de registros llenan un vacío entre los tipos de referencia y los tipos de valores, y lo ayudan a escribir código que sea limpio, sencillo y legible. Elija un tipo de registro en lugar de una clase o una estructura cuando los datos sean su principal preocupación. Utilice tipos de registros para crear objetos de transferencia de datos, objetos de respuesta API, objetos de configuración, modelos inmutables y objetos de valor en un diseño basado en dominios. Los tipos de registros brindan un excelente soporte para la coincidencia de patrones, lo que los convierte en una buena opción para trabajar con estructuras de datos complejas. Los tipos de registros están diseñados para ser tipos de datos inmutables de forma predeterminada, una característica que facilita la programación funcional, donde no se puede modificar una instancia una vez que se ha creado. Al decidir si usar clases, estructuras o registros en C#, considere su uso previsto. características, comparación de igualdad, inmutabilidad y características de rendimiento. En pocas palabras, las clases son adecuadas cuando se necesitan objetos con comportamiento y lógica compleja, las estructuras son adecuadas para valores ligeros y comportamiento mínimo, y los registros son ideales para estructuras de datos inmutables con reglas de igualdad sencillas. Copyright © 2024 IDG Communications, Inc.

Source link