gerekli değiştirici (C# Başvurusu)
Değiştirici, required
uygulandığı alanın veya özelliğin bir nesne başlatıcı tarafından başlatılması gerektiğini belirtir. Türün yeni bir örneğini başlatan tüm ifadeler tüm gerekli üyeleri başlatmalıdır. Değiştirici required
C# 11 ile başlayarak kullanılabilir. Değiştirici, geliştiricilerin required
özelliklerin veya alanların düzgün bir ş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:
- Değiştirici, içinde bildirilen
struct
alanlara ve özelliklere veclass
ve türleri de dahil olmak üzererecord struct
record
türlere uygulanabilir.required
Değiştiricirequired
, üyelerineinterface
uygulanamaz. - Açık arabirim uygulamaları olarak
required
işaretlenemez. Bunlar nesne başlatıcılarda ayarlanamaz. - Gerekli üyelerin başlatılması gerekir, ancak olarak başlatılabilirler
null
. Tür null atanamaz bir başvuru türüyse, üyesininull
olarak başlatırsanız derleyici bir uyarı döndürür. Derleyici, üye hiç başlatılmamışsa bir hata döndürür. - Gerekli üyelerin en az kendi türü kadar görünür olması gerekir. Örneğin, bir
public
sınıf olanprotected
birrequired
alanı içeremez. Ayrıca, gerekli özelliklerin en az kendi içeren türleri kadar görünür olan ayarlayıcılara (set
veyainit
erişimcilere) sahip 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
üyeyi 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ürler değiştiriciyirequired
içermelidir. Türetilen tür durumu kaldıramazrequired
. Türetilmiş türler bir özelliği geçersiz kılırken değiştiriciyi ekleyebilirrequired
. - Tür parametresi kısıtlamayı içerdiğinde
new()
, herhangirequired
bir üyesi olan bir tür 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. - Kayıtta
required
konumsal parametreler için bildirimde değiştiriciye izin verilmez. Değiştiriciyi içerenrequired
bir konumsal özellik için açık bir bildirim ekleyebilirsiniz.
Konumsal kayıtlar gibi bazı türler, konumsal özellikleri başlatmak için birincil oluşturucu kullanır. Bu özelliklerden herhangi biri değiştiriciyi required
içerirse, birincil oluşturucu özniteliğini SetsRequiredMembers
ekler. Bu, birincil oluşturucunun tüm gerekli üyeleri başlatdığını gösterir. özniteliğiyle System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute kendi oluşturucunuzu yazabilirsiniz. Ancak, derleyici bu oluşturucuların gerekli tüm üyeleri başlatdığını doğrulamaz. Bunun yerine, özniteliği derleyiciye oluşturucunun tüm gerekli üyeleri başlatdığını onaylar. SetsRequiredMembers
özniteliği şu kuralları oluşturuculara ekler:
- özniteliğiyle
SetsRequiredMembers
this()
base()
ek açıklama ekli başka bir oluşturucuya zincirleyen bir oluşturucu da özniteliğiniSetsRequiredMembers
içermelidir. Bu, çağıranların tüm uygun oluşturucuları doğru kullanabilmesini sağlar. - Türler
SetsRequiredMembers
içinrecord
oluşturulan kopya oluşturucuları, üyelerdenrequired
biri ise özniteliğini uygular.
Uyarı
, SetsRequiredMembers
derleyicinin bir nesne oluşturulduğunda tüm required
üyelerin başlatıldığını denetlemesini devre dışı bırakır. Dikkatli kullanın.
Aşağıdaki kod, ve LastName
özellikleri için değiştiriciyi required
kullanan bir sınıf hiyerarşisini FirstName
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.