Empecemos con una simple demostración.
12string ="¡Esto es una guía escrita!";Console.WriteLine($"La variable con nombre: {nombre()}, contiene el valor: {}");
csharp
Esto nos da el siguiente resultado.
1La variable con nombre: , tiene el valor: Esta es una guía escrita!
bash
Esto le da más elegancia al código y facilita el seguimiento de la propiedad que se utiliza y el nombre literal de la propiedad.
Antes de la versión 6.0 de C#, había una tarea muy común que ocurría mucho en el mundo de la programación. Esta tarea sigue siendo común, pero la sobrecarga se reduce por nuestro nuevo operador nombre de . Es decir, esta tarea consistía en enviar una notificación cuando una propiedad de un objeto cambiaba. Este trozo de código es de un juego muy simple que escribí el año pasado sobre monstruos y héroes. No tiene nada de extravagante, pero el nombre del operador muestra su fuerza. Sin el operador, mi código se habría visto así:
1234567publicbool isAlive{get{return _isAlive;}set{this.OnPropertyChanged("isAlive");}}
csharp
Con el operador se ve así.
12345678publicbool isAlive{get{return _isAlive;}set{this.OnPropertyChanged(nameeof(isAlive));}}
csharp
Para mí, esto fue un gran cambio en el juego ya que alivió la necesidad de escribir los nombres de las propiedades como cadenas y pasarlos como argumento para el evento OnPropertyChanged .
Otro ejemplo debería solidificar aún más el concepto en ti.
12345678910111213141516171819202122232425262728293031 usando System;using System.Text;namespace NameOfFeature{publicclassWorker{publicWorker(string name,string title,string company){if(name ==null)thrownewArgumentNullException(nameeof(name));else Console. WriteLine("Nombre: "+ nombre);if(title ==null)thrownewArgumentNullException(nameeof(title));else Consola. WriteLine("Edad: "+ empresa);}estaticvoidMain(String[] args){Worker d =newWorker("Dániel", "DevOps Engineer", "Itronlabs"); Console.Read();}}
csharp
El siguiente resultado se produce al ser ejecutado.
123Nombre: DánielLocation: DevOps EngineerAge: Itronlabs
bash
En este ejemplo, vimos que el operador nameeof nos ayuda a crear una aplicación más concisa al no encadenar las propiedades o argumentos de nuestro constructor, simplemente utilizando la característica.
También tienes la opción de especificar el tipo y el espacio de nombre, pero el literal de la cadena producida no está totalmente calificado!
1Console.WriteLine(nameeof(System.Collections.Generic));
csharp
La siguiente salida nos da la bienvenida.
1Genérico
bash
Vamos a crear otro ejemplo con una lista de números enteros; más específicamente, números impares.
12345678List<int;;NúmerosImpares =NuevaList<int;;{1,3,5,7,9,11};Consola.WriteLine(nameeof(oddNumbers.Add));Consola.WriteLine(nameof(oddNumbers.Count));Consola. WriteLine(nameof(oddNumbers.FindAll));Console.WriteLine(nameof(oddNumbers.ForEach));Console.WriteLine(nameof(oddNumbers.IndexOf));Console.WriteLine(nameof(oddNumbers.Remove));
csharp
Al ejecutar el código anterior, vemos lo siguiente en la consola:
123456AddCountFindAllForEachIndexOfRemove
bash
Este es también un gran ejemplo de la característica que el operador trajo a nuestras vidas.
En Foof Confiamos: Un diálogo es un enlace a un diálogo muy popular creado por Eric Lippert . Resume bastante bien por qué el infoof , el predecesor del nombre de , fracasó y por qué el nombre de tuvo éxito.