.NET 8.0'daki yenilikler [8]: C# 12.0'da nameof() ile ilgili iyileştirmeler

Adanali

Member
C# 6.0'da tanıtılan yeni operatör nameof() bir tanımlayıcının adını karakter dizisi olarak döndürür (çok parçalı adlarda yalnızca son kısım). Bu operatör sağlamlığı artırır ve bir sınıfın veya sınıf üyesinin adının dize olarak iletilmesinin gerektiği durumlarda yeniden düzenlemeyi basitleştirir.

Duyuru








Dr. Holger Schwichtenberg, 53 tanınmış uzmanıyla çok sayıda orta ve büyük ölçekli şirketi danışmanlık, eğitim ve yazılım geliştirme yoluyla destekleyen www.IT-Visions.de uzman ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası konferansa katılımı, 90'dan fazla uzmanlık kitabı ve 1.500'den fazla uzmanlık makalesi sayesinde Holger Schwichtenberg, .NET ve web teknolojileri konusunda Almanya'nın en tanınmış uzmanlarından biridir.







Operatör nameof() Bu, C# 12.0'dan önce işe yaradı ancak bazı durumlarda işe yaramadı. C# 12.0'dan önce bazı durumlarda (statik üyeler, açıklamalar) örnek üyelerin adını sınıf üyelerinden almak mümkün değildi. Microsoft, C# 12.0'ın kapsamını bu durumları içerecek şekilde genişletti.


// 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!");
}
}



Bu, C# 12.0'dan önceki ifade olacaktır. nameof(Name.Length) Yukarıdaki altı durumun üçünde bu mümkün olmadı ve derleyici tarafından “hata CS0120: Statik olmayan alan, yöntem veya 'Name.Length' özelliği için bir nesne referansı gerekli” derleme hatasıyla tanındı. Aşağıdaki ekran görüntüsü kırmızı çizgilerle C# 12.0'dan önce neyin mümkün olmadığını göstermektedir:







C# 12.0'dan önceki nameof() işlevinin olası kullanım durumları vurgulanmıştır.


(Resim: Ekran görüntüsü (tarafından Holger Schwichtenberg))




(kendim)



Haberin Sonu
 
Üst