.NET 7'de yeni [6]: C# 11.0 ile gerekli üyeler

Womanne

Member
Yeni C# yeni anahtar kelimeyi getirin required Alanlar ve özellikler için. Bir sınıfın verilerinin bir üyesi bu eklemeyi alırsa, verilerin bu üyesinin üreticide veya nesnenin başlatıcısında sınıf kullanıcısı tarafından ayarlanması önemlidir. Bir üretici [SetsRequiredMembers] Gerekli tüm üyeleri sağlayan derleyiciyi gösterir.










Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta 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.







Ek required Sınıflar, yapılar ve kayıt türlerindeki veri üyelerine izin verilir, ancak arayüzlerde verilmez.

Pratik örnek


Aşağıdaki sınıf bir alan ve iki özellik bildirir required Bu eklenmeden başka bir mülkün yanı sıra. Parametreleri olmayan parametrelere ek olarak, her ikisi de parametreli iki üretici daha vardır. [SetsRequiredMembers] not edilirler; Ancak, istenen iki üyeden biri zirveye dayanmaktadır.



Kod ayrıca ne zaman derlenir [SetsRequiredMembers] Tüm gerekli üyeler değil. Dikkat bile yok! Bu, derleyici spesifikasyona dayanmaktadır. [SetsRequiredMembers] kodda. Derleyicinin reddedildiği orijinal plan reddedildi. Bireysel üyelerin kapatılabileceği ve dışlanabileceği plan da vardı. Bu da mümkün değil. C# 11.0. Microsoft Alıntı:

“Bu teklifin önceki bir versiyonu, bir üreticinin gerektirdiği bireysel üyelerin eklenmesine ve kaldırılmasına izin veren daha büyük bir metale sahipti ve üreticinin talep edilen tüm üyeleri ayarladığı doğrulama. Bu çok karmaşık olarak kabul edildi. Daha sonraki bir özellik olarak daha karmaşık sözleşmeler ve değişiklikler eklemeye çalışabiliriz.”





public class Consultant
{
public Consultant() { }

[SetsRequiredMembers]
public Consultant(int id, string name) =>
(ID, Name) = (id, name);
[SetsRequiredMembers]
public Consultant(int id, string name, DateTime created) =>
(ID, Name, Created) = (id, name, created);

public required int ID; // Required Field
public required string Name { get; init; } // Required Property
public required DateTime Created { get; init; }
= DateTime.Now; // Required Property

public string? City { get; set; } // nicht "required"!
}



Bu sınıf artık aşağıdaki gibi bulunabilir:



// 1. Aufruf des Konstruktors mit den drei erforderlichen Angaben
var p1 = new Consultant(1, "Dr. Holger Schwichtenberg",
DateTime.Now);

// 2. Aufruf des Konstruktors mit nur zwei der drei Angaben
var p2 = new Consultant(2, "Dr. Joachim Fuchs");

// 3. Aufruf der parameterlosen Initialisierung aller drei
// Angaben im Objekt-Initialisierer
var p3 = new Consultant() { ID = 2, Name =
"Dr.habil. Klaus Schmaranz", Created = DateTime.Now };



Ancak izin verilmez:

  • Nesnenin nesnesi olmayan parametreleri olmayan parametreler:







  • Eksik nesneleri olan parametreleri olmayan parametreler:







Örnek ayrıca mülk için yeterli olmadığını göstermektedir Created Sınıfta standart bir değer ataması vardır. Çağrı henüz Created göstermek.

Visual Studio, bir üye ayarlamanız gerektiğinde aracın önerilerini açıkça gösterir:










(RME)
 
Üst