gerekli modifikatör (C# Referans)
required
değiştiricisi, alanının veya uygulandığı özelliğinin, bir nesne başlatıcısıtarafından başlatılması gerektiğini gösterir. Türün yeni bir örneğini oluşturan herhangi bir ifade, gerekli tüm üyeleribaşlatmalıdır.
required
değiştiricisi C# 11 ile başlayarak kullanılabilir.
required
değiştiricisi, geliştiricilerin özelliklerin veya alanların düzgün şekilde başlatılması gereken türler oluşturmasına olanak tanır, ancak yine de nesne başlatıcıları kullanarak başlatmaya izin verir. Çeşitli kurallar bu davranışı sağlar:
-
required
değiştirici,struct
'te bildirilen alanlarına ve özelliklerine,class
türlerinde, dahil olmak üzererecord
verecord struct
türlerine uygulanabilir.required
değiştirici,interface
üyelerine uygulanamaz. - Açık arabirim uygulamaları
required
olarak işaretlenemez. Bunlar nesne başlatıcılarda ayarlanamaz. - Gerekli üyelerin başlatılması gerekir, ancak
null
olarak başlatılabilirler. Tür null atanamaz bir başvuru türüyse,null
için üyeyi başlatırsanız derleyici bir uyarı döndürür. Derleyici, üye hiç başlatılmamışsa bir hata verir. - Gerekli üyelerin en az kendi türü kadar görünür olması gerekir. Örneğin, bir
public
sınıfıprotected
birrequired
alanı içeremez. Ayrıca, gerekli özelliklerin en az içerdikleri türler kadar görünür olan değiştiricileri (set
veyainit
erişimcileri) olması gerekir. Erişilebilir olmayan üyeler, örnek oluşturan kod tarafından ayarlanamaz. - Türetilmiş sınıflar, temel sınıfta bildirilen bir
required
üyesini gizleyemez. Gerekli bir üyeyi gizlemek, çağıranların bunun için nesne başlatıcıları kullanmasını engeller. Ayrıca, gerekli bir özelliği geçersiz kılan türetilmiş türlerrequired
değiştiriciyi içermelidir. Türetilen tür,required
durumunu kaldıramaz. Türetilmiş türler, bir özelliği geçersiz kılma sırasındarequired
değiştiriciyi ekleyebilir. - Herhangi bir
required
üyesi olan bir tür, tür parametresinew()
kısıtlamasını içerdiğinde tür bağımsız değişkeni olarak kullanılamaz. Derleyici, tüm gerekli üyelerin genel kodda başlatılmasını zorunlu kılamaz. -
required
değiştiricisi, kayıtta konumsal parametreler için bildirimde kullanılamaz.required
değiştiricisini içeren bir konumsal özellik için açık bir bildirim ekleyebilirsiniz.
konumsal kayıtlargibi bazı türler, konumsal özellikleri başlatmak için birincil oluşturucuyu kullanır. Bu özelliklerden herhangi biri required
değiştiricisini içerirse, birincil oluşturucu SetsRequiredMembers
özniteliğini ekler. Bu, birincil oluşturucunun tüm gerekli üyeleri başlatdığını gösterir.
System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute özniteliğiyle kendi oluşturucunuzu yazabilirsiniz. Ancak, derleyici bu oluşturucuların gerekli tüm üyeleri başlatdığını doğrulamaz. Bunun yerine, öznitelik derleyiciye oluşturucunun tüm gerekli üyeleri başlattığını bildirir.
SetsRequiredMembers
özniteliği şu kuralları oluşturuculara ekler:
-
this()
veyabase()
SetsRequiredMembers
özniteliğiyle açıklama ekleyen başka bir oluşturucuya zincirleyen bir oluşturucu daSetsRequiredMembers
özniteliğini içermelidir. Bu, çağıranların tüm uygun oluşturucuları doğru kullanabilmesini sağlar. -
record
türleri için oluşturulan kopyalama oluşturucuları, üyelerden birirequired
iseSetsRequiredMembers
özniteliğini uygular.
Uyarı
SetsRequiredMembers
, bir nesne oluşturulduğunda derleyicinin tüm required
üyelerinin başlatılıp başlatılmadığını kontrol etmesini devre dışı bırakır. Dikkatli kullanın.
Aşağıdaki kod, FirstName
ve LastName
özellikleri için required
değiştiricisini kullanan bir sınıf hiyerarşisini gösterir:
public class Person
{
public Person() { }
[SetsRequiredMembers]
public Person(string firstName, string lastName) =>
(FirstName, LastName) = (firstName, lastName);
public required string FirstName { get; init; }
public required string LastName { get; init; }
public int? Age { get; set; }
}
public class Student : Person
{
public Student() : base()
{
}
[SetsRequiredMembers]
public Student(string firstName, string lastName) :
base(firstName, lastName)
{
}
public double GPA { get; set; }
}
Gerekli üyeler hakkında daha fazla bilgi için bkz. C#11 - Gerekli üyeler özellik belirtimi.