C# 9 características y expectativas de C# 10

Características de C# 9.0 y expectativas de C# 10

Dotnetsafer
Dotnetsafer

La última versión de C#, 9.0, se lanzó oficialmente con .NET 5 en noviembre de 2020. En estos días ya hay rumores de las características de la futura versión, C# 10.

Una de las mayores ventajas del software de código abierto es poder ver cómo evoluciona el proyecto a lo largo del tiempo a medida que pasan los días. Con esto queremos hacer referencia al mismo C#, ya que podemos seguir su progreso en GitHub y ver sus principales novedades.

Comencemos con las características más importantes de C# 9.0 🤗


✅ Características de C# 9

A continuación vamos a repasar las novedades más importantes que nos ha traído C# 9.

🔼 Module Initializers en C# 9

En esta última versión de C# 9.0, el atributo [ModuleInitializer] se usa para especificar un método que podemos invocar antes que cualquier código en el módulo, el método de destino debe ser estático, sin ningún tipo de parámetro y devuelto vacío.


🔼 Extension GetEnumerator en C# 9

La instrucción foreach normalmente opera en una variable de tipo IEnumerator cuando contiene una definición de cualquier extensión pública para GetEnumerator.

Así es como podemos verlo en este ejemplo 👇


🔼 Covariant Return Types en C# 9

En C# 9.0, los tipos de retorno de métodos de anulación suelen ser mucho más específicos que las declaraciones en el tipo base 👇

El método GetTemperature() tiene el tipo de retorno Temperature, la clase derivada Spain anula este método y devuelve un tipo específico Celsius.

Es una característica que hace que nuestro código sea más flexible. ✅


🔼 Init Accessor en C# 9

El descriptor de acceso init hace que los objetos inmutables sean más fáciles de crear y usar 👇

El descriptor de acceso init se puede utilizar con estructuras, registros y clases. El descriptor de acceso init se puede usar con clases, estructuras y registros 👇


🔼 Records en C# 9

Ahora tenemos un nuevo tipo de referencia llamado registro que nos da el mismo valor. Para entenderlo mejor, tenemos este ejemplo 👇

Como podemos ver, el registro de puntos es inmutable, puede simplificar enormemente la sintaxis usando init accesor, ya que sus propiedades son de solo lectura.


🔼 Lambda Discard Parameters en C# 9

La próxima mejora de C# 9.0 es poder usar discard(_) como parámetro de entrada de una expresión lambda en caso de que ese parámetro no se use.

Es una característica que también nos permite leer el código de una forma más limpia y bonita.


🔼 Target-Typed new en C# 9

Otra característica muy importante en esta última versión de C# es la capacidad de omitir el tipo de una nueva expresión cuando el tipo de objeto se conoce explícitamente.

Veamos un ejemplo rápido y sencillo 👇

Es una característica muy útil ya que te permite leer el código de forma limpia sin tener que duplicar el tipo.


🔼 Top-Level Statements en C# 9

En C# 9.0, es posible escribir un programa de nivel superior después de usar declaraciones.

Aquí podemos ver el ejemplo 👇

Con declaraciones de nivel superior, no necesitaría declarar ningún espacio entre nombres, método principal o programa de clase. Esta nueva característica puede ser muy útil para los programadores que recién comienzan, ya que el compilador hace todas estas cosas por usted.


Espectativas de C# 10

¿Qué podemos esperar en la versión futura de C# 10?

Bien, hablemos de la versión futura 👇

  • ¿Qué podría traer de nuevo? 🤔
  • ¿Qué te gustaría que tuviera? 🤔
  • ¿Cuál es la posibilidad de que se agregue? 🤔

Ten en cuenta que las próximas funciones aún son discutibles y no es seguro que aparezcan en C# 10.

Tenga en cuenta que no son simplemente ideas o contribuciones de la comunidad. Estas características que voy a mencionar están siendo barajadas por sus desarrolladores. Y aunque no se implementan en la próxima versión, hoy se están refinando para que salgan en C# 10.

Empecemos 👍


🔼 File-level namespaces en C# 10

Todos nosotros cuando empezamos a programar en C# hemos creado una aplicación “Hello World”. Sabiendo esto, también sabemos que C# usa una estructura de bloques para espacios de nombres.

Lo mejor de esto es que los espacios de nombres se pueden superponer muy fácilmente, simplemente anidando bloques. De la misma manera que un solo archivo puede contener tipos en cualquier combinación de espacios de nombres y varios archivos pueden compartir el mismo espacio de nombres entre ellos.

Si queremos raspar un poco la parte negativa, este sistema añade un poco de sangría si lo comparamos con lenguajes de corchetes como JavaScript o Java.

La pregunta que nos hacemos en este punto es:

¿Es posible mantener esa funcionalidad, pero al mismo tiempo reducir el exceso de sangría? 🤔

Si

¿Cómo es posible? 🤔

Simplemente abrió que al ingresar espacios de nombres con alcance de archivo, esto permitiría establecer un espacio de nombres predeterminado que se aplicaría automáticamente a todo el archivo eliminando la sangría.

Es normal tener solo un espacio de nombres de ámbito de archivo por archivo, por lo que no habría ningún problema. Asimismo, la mayoría de los archivos de código C# no incluyen más de un espacio de nombres.

Si, por ejemplo, agregamos un bloque de espacio de nombres a un archivo que usa un espacio de nombres de ámbito de archivo, simplemente se crea un espacio de nombres anidado.

Veamos un ejemplo rápido 👇

Está claro que no es una característica muy grande, pero es preferible que cuantas más mejoras haya, más fácil e intuitiva será la tarea de programación.


🔼 Primary constructors en C# 10

En las últimas versiones publicadas de C#, el tema del código repetitivo se ha reducido considerablemente con características como propiedades automáticas.

La principal mejora de esto no es simplemente reducir la cantidad de código que se escribe, sino reducir la cantidad de código que debe leerse. Facilita la navegación por las bases de código y reduce los lugares más comunes donde pueden ocurrir errores.

Los constructores primarios son una muy buena implementación que volvería a reducir la cantidad de código que se escribe. Lo podemos ver con este sencillo ejemplo que tiene una clase que tiene un constructor y dos propiedades de solo lectura.

Lo que nos dicen las estadísticas es que el 70% de sus clases tienen constructores, y más del 90% de todas ellas simplemente no hacen más que copiar parámetros en propiedades.

Si aún no ha escrito ningún tipo de código de constructor, no se preocupe, ya que aún podemos crear y usar la clase de la misma manera.

Al utilizar el constructor principal, no se excluye la validación de propiedades. De la misma manera, sus reglas se pueden hacer cumplir en un establecedor de propiedades.

Veamos un ejemplo 👇

También son posibles otros detalles (llamar al constructor base en una clase derivada, agregar constructores). La principal desventaja de todo esto es que los constructores primarios podrían colisionar con los registros de posición.


🔼 10 Raw string literals en C# 10

Ya sabemos que las cadenas ordinarias que tiene C # tienden a ser bastante desordenadas ya que necesitan comillas (“”), líneas nuevas (\ n) y barras diagonales inversas (). Lo que ofrece C# antes de este pequeño problema es el uso de caracteres especiales.

Por ejemplo, podemos prefijar una cadena con @ y tener rienda suelta para agregar todos estos detalles sin ningún problema 👇

Lo que permite la cadena literal de cadena sin formato es crear nuevas rutas para evitar problemas de escape. Usar el delimitador de una serie de comillas seguidas de un salto de línea para comenzar y un salto de línea seguido del mismo número de comillas para cerrar.

Para entenderlo de forma más sencilla, les dejo este ejemplo a continuación 👇

Si su preocupación es que existe la posibilidad de una secuencia de comillas triples dentro de la cadena, simplemente puede extender el delimitador para que pueda usar todas las comillas que desee, siempre que se respeten el principio y el final.

De la misma manera que las cadenas @, las nuevas líneas y los espacios en blanco se conservan en una cadena sin formato. Lo que pasa es que se corta el espacio en blanco común, es decir, la cantidad que se usa para sangrar.

Veamos de manera más simple con un ejemplo 👇

A esto 👇

Con esto, quiero explicarle que las cadenas sin formato no están destinadas a reemplazar las cadenas @ que está utilizando en este momento.

Más bien, están preparados para los momentos específicos en los que necesita un bloque marcado o un código arbitrario y, a su vez, necesita un enfoque de codificación que garantice la seguridad.


🟢 Conclusión de C# 10:

Para terminar este artículo, la conclusión de Dotnetsafer es que a C# aún le quedan muchos años de viaje por delante y aún le quedan muchas cosas por agregar para hacer la tarea de programar aún más fácil y óptima. Estamos esperando C# 10.

¿Qué piensas? 🤔

Summary
Características de C# 9 y espectativas de C# 10
Article Name
Características de C# 9 y espectativas de C# 10
Description
Características de C# 9 y espectativas de C# 10
Author
Publisher Name
Dotnetsafer
Publisher Logo

0 Comments

Leave a Reply

More great articles

Blazor WebAssembly

Qué es Blazor WebAssembly? La unión de .NET 5 y Blazor

Desde la última versión de .NET 5 en NET Conf 2020 , todos sus usuarios han visto de primera mano…

Read Story
net 6

.NET 6 Preview 2 (Notas de la versión + Nuevas funciones)

Anuncio de .NET 6 Preview 2 📰 El 11 de marzo de este año .NET 6 Preview 2 fue oficialmente…

Read Story
cross site scripting

Cross-Site Scripting (XSS) (3 consejos para prevenirlo)

👨‍💻Qué es Cross Site Scripting (XSS) Cross Site Scripting (XSS) es una vulnerabilidad que permite a un atacante inyectar scripts…

Read Story
Arrow-up