.NET 7’deki yenilikler [6]: C# 11.0 ile gerekli üyeler

Adanali

Member
Yeni C#, new anahtar sözcüğünü getirir required alanlar ve özellikler için. Bir sınıfın veri üyesine bu ekleme verilirse, bu veri üyesinin sınıfın kullanıcısı tarafından yapıcıda veya nesne başlatıcıda ayarlanması zorunludur. Bir inşaatçı dahildir [SetsRequiredMembers] annotable, derleyiciye gerekli tüm üyeleri işgal ettiğini söyler.







Dr Holger Schwichtenberg, MAXIMAGO’da Güvenlikle ilgili son derece kritik alanlarda bile yenilik ve deneyime dayalı yazılım geliştirme sunan Baş Teknoloji Uzmanıdır. Aynı zamanda, çok sayıda orta ölçekli ve büyük şirketi yazılım geliştirme ve işletim konusunda 38 ünlü uzmanla danışmanlık ve eğitimle destekleyen uzman ağı www.IT-Visions.de’nin başkanıdır.







Ekleme required sınıflarda, yapılarda ve kayıt türlerinde veri üyeleri için izin verilir, ancak arayüzlerde izin verilmez.

Pratik örnek


Aşağıdaki sınıf ayrıca bir alan ve iki özellik bildirir. required ve bu ekleme olmadan başka bir özellik. Parametresiz oluşturucuya ek olarak, her ikisi de parametreli hale getirilmiş iki başka oluşturucu vardır. [SetsRequiredMembers] not edilirler; ancak bunlardan biri gerekli üç üyeyi de meşgul olarak ayarlar.


Kod ayrıca şu durumlarda derlenir: [SetsRequiredMembers] gerekli tüm üyeleri hiç ayarlamaz. Herhangi bir uyarı bile yok! Bu şu anlama gelir: derleyici belirtime güvenir [SetsRequiredMembers] kodda. Derleyicinin bunu doğrulaması için orijinal plan hurdaya çıkarıldı. Bireysel üyeleri dahil etmek ve hariç tutmak için bir plan da vardı. C# 11.0’dan beri bu da mümkün değildir. Microsoft’tan alıntı:

“Bu teklifin daha önceki bir sürümü, başlatma etrafında daha geniş bir üstdile sahipti, bu da bir kurucudan gerekli üyelerin eklenmesine ve çıkarılmasına ve ayrıca kurucunun gerekli tüm üyeleri ayarladığının doğrulanmasına izin veriyordu. Bu, başlangıç için çok fazla karmaşık kabul edildi. yayınlandı ve kaldırıldı. Bir sonraki özellik olarak daha karmaşık sözleşmeler ve değişiklikler eklemeyi düşünebiliriz.”


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 şu şekilde somutlaştırılabilir:


// 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:

  • Nesne başlatıcısı olmayan parametresiz kurucu:







  • Eksik nesne başlatıcılı parametresiz kurucu:







Örnek ayrıca şunları gösterir: Özelliğin yeterli olmaması Created sınıfta varsayılan bir değer ataması vardır. Arayanın hala Created göstermek.

Visual Studio, bir üye ayarlamanız gerektiğinde araç ipuçlarında açıkça belirtir:









(rm)



Haberin Sonu
 
Üst