.NET 9.0'da yeni [11]: C# 13.0'da ref yapısı için yeni olanaklar

Womanne

Member
C# 7.2'den her zaman yığın üzerinde yaşayan ve asla kazıkta geziler yapmayan yapılar var: ref struct. C# 13.0'da Microsoft, ref struct genişletildi.


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.







Bu tür türler şimdi olabilir:

  • Arayüzleri uygulayın. Bununla birlikte, kısıtlama, derleyicinin boksu dahili olarak yapması gerektiğinden, yapının arayüz türüne dönüştürülemeyeceği anlamına gelir.
  • yazım olarak kullanılabilir. Ancak, jenerik tipi veya jenerik yöntemi yapmanız gerekir where T : allows ref struct kullanmak.
  • Itarers ile yield kullanılabilir. Bununla birlikte, yapı Theter'in mevcut yürütülmesinden daha uzun yaşamamalıdır.
  • Eşzamansız yöntemlerle Task VEYA Task<T> teslim edin, kullanılabilir.
Bununla birlikte, bir adamınız varsa ref struct Bildirildi, boks artık mümkün değil. Kullanımı ref struct Bu nedenle sınırlıdır. Örneğin, kızamazsın ve kimse List<T> ondan üretin.

Aşağıdaki kod türünü gösterir ref structbir arayüz uygular:


internal interface IPerson
{
int ID { get; set; }
int Name { get; set; }
}

// NEU seit C# 13.0: ref struct kann Schnittstelle implementieren
ref struct Person : IPerson
{
public int ID { get; set; }
public int Name { get; set; }
// ToString()
public override string ToString()
{
return "Person #" + ID + " " + Name;
}
}
}

class Client
{
public void Run()
{
Person p = new Person();
p.ID = 1;
p.Name = 2;
Console.WriteLine(p.ID);
Console.WriteLine(p.Name);

// Das ist alles nicht erlaubt!
// IPerson i = p; // Casting auf Schnittstelle
// List<Person> PersonList = new(); // List<T>
// PersonList[] PersonArray = new Person[10]; // Array
}
}




(RME)
 
Üst