Aracılığıyla paylaş


private protected (C# Başvurusu)

Anahtar private protected sözcük bileşimi bir üye erişim değiştiricidir. Özel korumalı üyeye, içeren sınıfından türetilen türler tarafından erişilebilir, ancak yalnızca kendi içeren derlemesi içinde. Diğer erişim değiştiricileriyle karşılaştırması private protected için bkz . Erişilebilirlik Düzeyleri.

Uyarı

private protected Erişim değiştiricisi C# sürüm 7.2 ve sonraki sürümlerde geçerlidir.

Örnek

Bir temel sınıfın özel korumalı üyesine, değişkenin statik türü türetilmiş sınıf türü olduğunda, yalnızca bünyesindeki derlemedeki türetilmiş türlerden erişilebilir. Örneğin, aşağıdaki kod kesimini göz önünde bulundurun:

// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
    private protected int myValue = 0;
}

public class DerivedClass1 : BaseClass
{
    void Access()
    {
        var baseObject = new BaseClass();

        // Error CS1540, because myValue can only be accessed by
        // classes derived from BaseClass.
        // baseObject.myValue = 5;

        // OK, accessed through the current derived class instance
        myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass2 : BaseClass
{
    void Access()
    {
        // Error CS0122, because myValue can only be
        // accessed by types in Assembly1
        // myValue = 10;
    }
}

Bu örnek, Assembly1.cs ve Assembly2.cs adlı iki dosya içerir. İlk dosya, genel bir temel sınıfı BaseClass ve ondan türetilmiş bir tür DerivedClass1 içerir. BaseClass, aynı derleme içinde miras alınan üye olarak erişilebilen özel korumalı bir myValue üyesine sahiptir.

İkinci dosyada, myValue'ye DerivedClass2'nin devralınmış bir üyesi olarak erişim girişimi bir hata üretir, çünkü private protected üyeleri yalnızca aynı derleme içindeki türetilmiş türler tarafından erişilebilir. Bu, (herhangi bir derlemedeki türetilmiş sınıflardan erişime izin veren) ile protected (aynı derlemedeki herhangi bir sınıftan veya herhangi bir derlemedeki türetilmiş sınıflardan erişime izin veren) arasındaki temel farktır protected internal .

Assembly1.cs bir InternalsVisibleToAttributeAssembly2 adına sahipse, türetilen DerivedClass2 sınıfı private protected'te bildirilen BaseClass üyelere erişime sahiptir. InternalsVisibleTo diğer derlemelerdeki türetilmiş sınıflar için private protected üyelerini görünür hale getirir.

Diğer korumalı erişim değiştiricileriyle karşılaştırma

Aşağıdaki tabloda, üç korumalı erişim değiştiricisi arasındaki temel farklar özetlemektedir:

Erişim Değiştiricisi Aynı Derleme, Türetilmiş Sınıf Aynı Derleme, Türetilmemiş Sınıf Farklı Derleme, Türetilmiş Sınıf
protected ✔️ ✔️
protected internal ✔️ ✔️ ✔️
private protected ✔️
  • Herhangi bir derlemedeki türetilmiş sınıfların üyeye erişmesini istediğinizde kullanın protected
  • En izinli erişimi istediğinizde kullanın protected internal (herhangi bir yerde aynı derlemedeki veya türetilmiş sınıflardaki tüm sınıflar)
  • En kısıtlayıcı korumalı erişimi istediğinizde kullanın private protected (yalnızca aynı derlemedeki türetilmiş sınıflar)

Yapı üyeleri, yapı devralınamaz olduğundan private protected olamaz.

C# dil belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# söz dizimi ve kullanımı için kesin kaynaktır.

Ayrıca bakınız