Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
-
requireddeğiştirici, 'te bildirilen alanlarına vestructözelliklerine,classtürlerinde, dahil olmak üzererecordverecord structtürlerine uygulanabilir.requireddeğiştirici,interfaceüyelerine uygulanamaz. - Açık arabirim uygulamaları
requiredolarak işaretlenemez. Bunlar nesne başlatıcılarda ayarlanamaz. - Gerekli üyelerin başlatılması gerekir, ancak
nullolarak başlatılabilirler. Tür null atanamaz bir başvuru türüyse,nulliç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
publicsınıfırequiredbirprotectedalanı içeremez. Ayrıca, gerekli özelliklerin en az içerdikleri türler kadar görünür olan değiştiricileri (setveyainiteriş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ürlerrequireddeğiştiriciyi içermelidir. Türetilen tür,requireddurumunu kaldıramaz. Türetilmiş türler, bir özelliği geçersiz kılma sırasındarequireddeğ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. -
requireddeğiştiricisi, kayıtta konumsal parametreler için bildirimde kullanılamaz.requireddeğ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:
-
SetsRequiredMembersveyathis()base()ö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. -
recordtürleri için oluşturulan kopyalama oluşturucuları, üyelerden biriSetsRequiredMembersiserequiredö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, required ve FirstName özellikleri için LastName 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.