Nouvelles Du Monde

Nouveau dans .NET 8.0 [8]: Améliorations pour nameof() en C# 12.0

Nouveau dans .NET 8.0 [8]: Améliorations pour nameof() en C# 12.0

2024-02-02 14:30:00

Le nouvel opérateur introduit en C# 6.0 nameof() renvoie le nom d’un identifiant sous forme de chaîne de caractères (dans le cas de noms en plusieurs parties, uniquement la dernière partie). Cet opérateur augmente la robustesse et facilite la refactorisation dans les situations où le nom d’une classe ou d’un membre de classe doit être transmis sous forme de chaîne.

Publicité


Dr. Holger Schwichtenberg est le directeur technique du réseau d’experts www.IT-Visions.de qui, avec 53 experts renommés, soutient de nombreuses moyennes et grandes entreprises par le biais de conseils et de formations ainsi que de développement de logiciels. Grâce à ses participations à de nombreuses conférences nationales et internationales ainsi qu’à plus de 90 ouvrages spécialisés et plus de 1 500 articles spécialisés, Holger Schwichtenberg est l’un des experts les plus connus en Allemagne dans le domaine des technologies .NET et Web.

L’opérateur nameof() fonctionnait avant C# 12.0 mais ne fonctionnait pas dans certaines situations. Récupérer le nom des membres d’instance à partir des membres de classe n’était pas possible dans certains cas (membres statiques, annotations) avant C# 12.0. Microsoft a élargi la portée de C# 12.0 pour inclure ces cas.

// nameof(Name.Length) nicht möglich vor C# 12.0!
[Description($"{nameof(StringLength)} liefert von {nameof(Name)} die Eigenschaft {nameof(Name.Length)}")] 
public struct Person
{
 public string Name;
 // bisher schon möglich:
 public string MemberName1() => nameof(Name);
 // bisher schon möglich:
 public string MemberName2() => nameof(Name.Length);
 // bisher schon möglich:
 public static string MemberName3() => nameof(Name);
 // bisher Fehler CS0120, da statisches Mitglied versucht 
 // auf Mitglied von Mitglied zuzugreifen
 public static string MemberName4() => nameof(Name.Length);
 
// nameof(Name.Length) war nicht möglich vor C# 12.0!
 [Description($"{nameof(StringLength)} liefert von {nameof(Name)} die Eigenschaft {nameof(Name.Length)}")] 

 public int StringLength()
 {
  return Name.Length;
 }
 
 public void PrintMemberInfo()
 {
  Console.WriteLine($"Die Struktur {nameof(Person)} hat ein "+ 
                    "Mitglied{nameof(Name)}, welches eine " + 
                    "Eigenschaft {nameof(Name.Length)} besitzt!"); 
 }
}

Ce serait l’expression avant C# 12.0 nameof(Name.Length) Cela n’a pas été possible dans trois des six cas indiqués ci-dessus et a été reconnu par le compilateur avec l’erreur de compilation « erreur CS0120 : une référence d’objet est requise pour le champ, la méthode ou la propriété non statique ‘Name.Length'”. La capture d’écran suivante montre avec des lignes rouges ce qui n’était pas possible avant C# 12.0 :



Les cas d’utilisation possibles de nameof() avant C# 12.0 sont soulignés.

(Image : Capture d’écran (par Holger Schwichtenberg))


(moi)

Vers la page d’accueil



#Nouveau #dans #.NET #Améliorations #pour #nameof
1706894091

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ADVERTISEMENT