Aracılığıyla paylaş


gerekli modifikatör (C# Referans)

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 oluşturan herhangi bir ifade, gerekli tüm üyeleribaşlatmalıdır. Değiştirici required C# 11'den itibaren kullanılabilir.

C# dili başvuru belgesi, C# dilinin en son yayımlanan sürümünü gösterir. Ayrıca, yaklaşan dil sürümü için genel önizlemelerdeki özelliklere yönelik ilk belgeleri içerir.

Belgelerde ilk olarak dilin son üç sürümünde veya geçerli genel önizlemelerde sunulan tüm özellikler tanımlanır.

Tavsiye

Bir özelliğin C# dilinde ilk tanıtıldığı zamanları bulmak için C# dil sürümü geçmişi makalesine bakın.

Geliştiriciler değiştiriciyi kullanarak, özelliklerin required veya alanların düzgün bir şekilde başlatılması gereken türler oluşturabilir, ancak yine de nesne başlatıcılar aracılığıyla başlatmaya izin verebilir. Çeşitli kurallar bu davranışı sağlar:

  • Değiştiriciyi required ve türleri dahil olmak üzere record ve türlerinde struct bildirilen alanlara ve classrecord structözelliklere uygulayın. Değiştiriciyi bir interfaceöğesinin required üyelerine uygulayamazsınız.
  • Açık arabirim uygulamalarını olarak requiredişaretleyemezsiniz. Bunları nesne başlatıcılarda ayarlayamazsınız.
  • Gerekli üyeleri başlatmanız gerekir, ancak bunları olarak nullbaşlatabilirsiniz. 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 public sınıfı requiredbir protected alanı içeremez. Ayrıca, gerekli özelliklerin en az içerdikleri türler kadar görünür olan değiştiricileri (set veya init erişimcileri) olması gerekir. Örnek oluşturan kod, erişilebilir olmayan üyeleri ayarlayamaz.
  • 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ürler required 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ında required değiştiriciyi ekleyebilir.
  • Tür parametresi kısıtlamayı içerdiğinde new() tür bağımsız değişkeni olarak herhangi required bir üyeyle tür kullanamazsınız. Derleyici, tüm gerekli üyelerin genel kodda başlatılmasını zorunlu kılamaz.
  • Bir kayıtta required konumsal parametreler için bildirimde değiştiriciyi kullanamazsınız. 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 öznitelik, 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:

  • SetsRequiredMembersveya this()base() özniteliğiyle açıklama ekleyen başka bir oluşturucuya zincirleyen bir oluşturucu da SetsRequiredMembers ö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 biri SetsRequiredMembersise required özniteliğini uygular.

Uyarı

özniteliği, 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, 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.