.NET 9.0'da yeni [7]: C# 13.0'daki yöntemin aşırı yükleri için öncelik

İle [OverloadResolutionPriority] İsimler adına System.Runtime.CompilerServices Geliştiriciler, hangi aşırı yüklerin kullanılması gerektiğine karar verirken bazı aşırı yüklerin daha yüksek bir öncelik aldığını belirleyebilir. Örneğin, bu ne zaman yardımcı olur [Obsolet] Favori uygulamaya rehberlik etmek için not edilmiş bir yöntemin eklenmesi vardır.

Duyuru

Holger Schwichtenberg, 53 ünlü uzmanla, danışmanlık ve eğitim ve yazılımın geliştirilmesinde çok sayıda orta boy ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.

Yeni ek açıklama ile [OverloadResolutionPriority] Bir tamsayı verirseniz:

  • Ek açıklamada belirtilen sayı ne kadar büyük olursa, öncelik o kadar büyük olur.
  • Standart öncelik 0'dır.
  • Standardın altındaki önceliği azaltmak için negatif bir sayı mümkündür.

Aşağıdaki listede bir örnek gösterilmektedir: çağrı Print() Bir ip ile olmadan olurdu [OverloadResolutionPriority] Her zaman uygulanması için Print() Bu aşırı yük olsa bile, bir dize parametresi ile gidin [Obsolete] Karakterize edilir. Sokmak [OverloadResolutionPriority] Derleyiciyi başka bir uygulamaya aktarırsanız. Örnekte, her iki parametre türü ile her iki uygulama uygulanacak object ilave olarak ReadOnlySpan<char> Aynı öncelik değerini verin, derleyici dönüşümün ne yapması gerektiğini bilmiyor ve çeviriyi reddediyor:

Çağrı aşağıdaki yöntemler veya özellikler arasında belirsizdir: 'CS13_OverloadesolutionPriority.print (Nesne, Konsolor)' ve 'CS13_OverdresolutionPriority.print (Readonlyspan Konsolor) '

Farklı bir öncelik değeri ile derleyiciyi bir veya diğer uygulamaya yönlendirmek mümkündür, burada listede de 10 değerle public void Print(ReadOnlySpan<char> text, ConsoleColor color).

Uygulama public void Print(object text, ConsoleColor color) Ancak yine de diğer tüm veri türleri için kullanılır, örneğin 42 gibi sayılar, çünkü derleyici otomatik olarak ReadOnlySpan<char> dönüştürmek.

Aşağıdaki kod, yeni ek açıklamanın kullanımını göstermektedir [OverloadResolutionPriority]:

using System.Runtime.CompilerServices;
 
namespace NET9_Console.CS13;
 
public class CS13_OverloadResolutionPriority
{
 public void Run()
 {
  CUI.Demo(nameof(CS13_OverloadResolutionPriority));
 
  // verwendet Print(ReadOnlySpan<char> text)
  ReadOnlySpan<char> span = "www.IT-Visions.de".AsSpan();
  Print(span);
 
  // verwendet Print(ReadOnlySpan<char> text) wegen OverloadResolutionPriority(10)
  Print("Dr. Holger Schwichtenberg");
 
  // verwendet public void Print(object obj)
  Print(42);
 
 }
 
 [Obsolete]
 //[OverloadResolutionPriority(10)]
 public void Print(string text)
 {
  // Set the console color
  Console.ForegroundColor = ConsoleColor.Red;
 
  // Print the text
  Console.WriteLine("string: " + text);
 
  // Reset the console color
  Console.ResetColor();
 }
 
 [OverloadResolutionPriority(1)]
 public void Print(object obj)
 {
  // Set the console color
  Console.ForegroundColor = ConsoleColor.Yellow;
 
  // Print the text
  Console.WriteLine("Object: " + obj.ToString());
 
  // Reset the console color
  Console.ResetColor();
 }
 
 [OverloadResolutionPriority(10)]
 public void Print(ReadOnlySpan<char> text)
 {
  // Set the console color
  Console.ForegroundColor = ConsoleColor.Green;
 
  // Print the text
  Console.WriteLine("ReadOnlySpan<char>: " + text.ToString());
 
  // Reset the console color
  Console.ResetColor();
 }
 
}

Listenin baskısı

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

Eğer sen bir public void Print(string text, ConsoleColor color) En az 10 setin aşırı yüklenmesinin çözülmesinin önceliği

[Obsolete]
[OverloadResolutionPriority(10)]
public void Print(string text, ConsoleColor color)
{
 // Set the console color
 Console.ForegroundColor = color;
 
 // Print the text
 Console.WriteLine("string: " + text);
 
 // Reset the console color
 Console.ResetColor();
}

O zaman bir

Print("Dr. Holger Schwichtenberg", ConsoleColor.Yellow);

Aşırı yük string-Parametre, bununla bile [Obsolete] işaretlenmiş.


(RME)


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir