You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

0 Días
11 Hrs
30 Min
5 Seg

Tipos registro y estructura

10/19
Resources

What are additional types in C Sharp?

In the fascinating world of C Sharp, not only classes play a central role in object-oriented programming. There are other types, such as structures and records, which, although less well-known, are equally relevant for specific scenarios. Taking advantage of these differences can optimize your code and make it easier to solve various problems in C Sharp.

What is the difference between class, structure and record?

Throughout the course, we have explored classes in depth. Here, the differences between class, structure, and register become vital:

  • Classes: They operate through references. When an object is created, a memory location is reserved and each instance will be unique, even if the data is identical.
  • Structures and registers: They operate based on values. Two objects with the same data are considered equal.

Classes are incredibly versatile and suitable for any level of complexity, from small components to large and complex solutions. In contrast, structures and records are ideal for small, value-centric objects.

When to use structures or records?

Structures and records are useful for:

  • Comparing objects by value: ideal for very small objects with few properties.
  • Immutable data: Especially relevant for records, where data does not change over time.

For example, if you need to compare properties of objects without evaluating each one manually, records provide an efficient solution.

Practical example: comparing classes and records

Comparing with classes

In the following example, we create two objects superman and superman2 based on the superhero class. Both have the same data, but when comparing them, the result is false because they are separate instances with different memory references:

var superman = new Superhero { Id = 1, Name = "Superman", SecretIdentity = "Clark Kent" };varsuperman2 = new Superhero { Id = 1, Name = "Superman", SecretIdentity = "Clark Kent" };Console.WriteLine(superman == superman2); // Output: false.

How records work

When using records, the same comparison would evaluate to true, since C Sharp allows comparing internal value sets directly:

public record SuperheroRecord(int Id, string Name, string SecretIdentity);
var superhero1 = new SuperheroRecord(1, "Superman", "Clark Kent");var superhero2 = new SuperheroRecord(1, "Superman", "Clark Kent");Console.WriteLine(superhero1 == superhero2); // Output: true.

As you can see, while in classes the result is false, with records it is true.

Why use records in microservices?

Imagine you work with microservices, where logs of multiple messages must be compared. Here, logs are a perfect choice, as they simplify the comparison and allow a more direct and efficient approach, without the need for property-by-property verification.

Recommended exercise

To put what you have learned into practice, we invite you to:

  1. Complete the record type by adding more properties and compare values.
  2. Create a structure type and perform a similar exercise.

Coming soon: Access modifiers in C Sharp

The knowledge continues to grow. In the next lesson, we will explore access modifiers in C Sharp, further enriching your skills and understanding of the language. See you there!

Contributions 10

Questions 0

Sort by:

Want to see more contributions, questions and answers from the community?

RECORD
En C#, un “record” es un tipo de referencia inmutable introducido en C# 9.0 que se utiliza para modelar datos simples y valores inmutables. Los “records” son especialmente útiles cuando tienes un conjunto de datos que no cambia después de su creación y deseas garantizar que no se pueda modificar. Algunas de las ventajas y casos de uso comunes de los “records” incluyen:

Inmutabilidad: Los “records” son inmutables de forma predeterminada, lo que significa que sus valores no pueden cambiar después de que se hayan creado. Esto garantiza que los datos permanezcan consistentes y predecibles.

Facilidad de Igualdad: Los “records” facilitan la comparación de igualdad de objetos basándose en sus valores en lugar de sus referencias. Esto es útil al realizar comparaciones de igualdad en lugar de referencia.

Sintaxis Concisa: Los “records” tienen una sintaxis concisa para definir propiedades y métodos. Puedes definir propiedades de solo lectura de manera abreviada.

Desestructuración: Los “records” admiten la desestructuración, lo que significa que puedes descomponer un objeto “record” en sus componentes individuales.

Patrones de Coincidencia: Los “records” funcionan bien con patrones de coincidencia, lo que facilita la escritura de código que responde a diferentes combinaciones de valores de objetos “record”.

Usos Comunes: Los “records” son ideales para modelar tipos de datos simples como puntos, vectores, coordenadas geográficas, datos de sensores y otros valores inmutables.

Aporte Los records son especialmente útiles cuando necesitas representar datos que no cambian después de su creación, como datos de entidades. Algunas de las características clave de los records incluyen la inmutabilidad, la facilidad de comparación y la concisión en la sintaxis de definición.

Aporte:

Los structs son tipos de valor, por lo que no pueden compararse por referencia. No existe una implementación por defecto de == para structs porque la comparación por miembros no siempre es una comparación válida, dependiendo del tipo.

Las principales diferencias entre una Record y una clase en C# son: 1. **Comparación**: Las Records comparan sus valores de manera estructural, mientras que las clases se comparan por referencia. Dos instancias de una clase con los mismos valores no son iguales, pero dos Records con los mismos valores sí. 2. **Inmutabilidad**: Las Records son inmutables por defecto, es decir, una vez creadas, sus propiedades no pueden cambiar. Las clases, en cambio, permiten la modificación de sus propiedades. 3. **Sintaxis y Simplicidad**: Definir una Record es más conciso que una clase, ya que no necesitas definir métodos adicionales si no son necesarios. Estos aspectos hacen que las Records sean ideales para estructuras de datos que requieren igualdad de valor, como en microservicios.
Despues de tantos años, veo una manera ejemplar de como poder hacer notar las diferencias sin palabras domingueras ni explicaciones rebuscadas, super entendido, agradezco al excelente maestro! KUDOS!!
Gran clase!!!
**CLASE**: la forma en la que se crean o se comparan los elementos dentro del código es a través de referencias. Eso significa que cada vez que creamos un objeto con esa clase, se va a apartar una posición de memoria para almacenar los datos de ese objeto y se le va a asignar un identificador a esa posición de memoria. Si creamos otro objeto con exactamente los mismos valores de todas maneras va a ser un objeto diferente ya que cada uno de los objetos va a tener una referencia diferente.
Al intentar hacer el ejercicio con `structs`, me generaba un error al compilar, resulta que en C#, los `structs` pueden compararse utilizando el operador `==`, pero solo si han sobrecargado explícitamente este operador o si sus campos son tipos que implementan comparaciones por defecto (como tipos primitivos). Por defecto, los structs no tienen el operador `==` definido, por lo que si intentas compararlos directamente sin sobrecargar este operador, obtendrás un error de compilación. Sin embargo, todos los structs heredan de `System.ValueType`, lo que significa que puedes usar el método `Equals` para hacer una comparación de igualdad de sus campos. `public struct SuperHeroStruct` `{` ` public int Id;` ` public string Name;` ` public string SecretIdentity;` `}` `var superHeroStruct1 = new SuperHeroStruct();` `superHeroStruct1.Id = 1;` `superHeroStruct1.Name = "Superman";` `superHeroStruct1.SecretIdentity = "Clark Kent";` `var superHeroStruct2 = new SuperHeroStruct();` `superHeroStruct2.Id = 1;` `superHeroStruct2.Name = "Superman";` `superHeroStruct2.SecretIdentity = "Clark Kent";` `Console.WriteLine(superHeroStruct1.Equals(superHeroStruct2));`
```c# //Compare Hero #4 vs. Hero #5 Hero.HeroRecord batman = new ( 4, "Bruce Wayne", "Batman", false, new List<Colors> { blackColor, yellowColor }, true, new List<SuperPower> { strengthPower }); Hero.HeroRecord spiderman = new(5, "Tobey Maguire", "Spider-man", false, new List<Colors> { blueColor, redColor }, true, new List<SuperPower> { strengthPower }); Console.WriteLine(batman == spiderman); //Output: False ```
`public record SuperHeroRecord(int id, string nombre, string IdentidadSecreta);` `SuperHeroRecord superHeroRecord = new(1, "SuperMan", "Clark kent");`