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

Adanali

Member
İ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, 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_OverloadRestresolutionPriority.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)
 
Üst