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.
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.