özel korumalı (C# Başvurusu)private protected (C# Reference)

private protectedAnahtar sözcük birleşimi bir üye erişim değiştiricisidir.The private protected keyword combination is a member access modifier. Özel korumalı bir üyeye, kapsayan sınıftan türetilmiş türler tarafından erişilebilir, ancak yalnızca kendi kapsayıcı bütünleştirilmiş kodu içinde erişilebilir.A private protected member is accessible by types derived from the containing class, but only within its containing assembly. private protectedDiğer erişim değiştiricilerine ilişkin bir karşılaştırma için bkz. Erişilebilirlik düzeyleri.For a comparison of private protected with the other access modifiers, see Accessibility Levels.

Not

private protectedAccess Modifier, C# sürüm 7,2 ve üzeri sürümlerde geçerlidir.The private protected access modifier is valid in C# version 7.2 and later.

ÖrnekExample

Bir temel sınıfın özel korumalı bir üyesine, yalnızca değişkenin statik türü türetilmiş sınıf türü ise, kendisini kapsayan derlemede bulunan türetilmiş türlerden erişilebilir.A private protected member of a base class is accessible from derived types in its containing assembly only if the static type of the variable is the derived class type. Örneğin, aşağıdaki kod kesimini göz önünde bulundurun:For example, consider the following code segment:

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, ve olmak üzere iki dosya içerir Assembly1.cs Assembly2.cs .This example contains two files, Assembly1.cs and Assembly2.cs. İlk dosya, bir ortak temel sınıf, BaseClass ve ondan türetilmiş bir tür içerir DerivedClass1 .The first file contains a public base class, BaseClass, and a type derived from it, DerivedClass1. BaseClass, myValue iki şekilde erişmeye çalışan özel korumalı bir üyenin sahibidir DerivedClass1 .BaseClass owns a private protected member, myValue, which DerivedClass1 tries to access in two ways. Bir örneğinden ilk erişme girişimi myValue BaseClass bir hata üretir.The first attempt to access myValue through an instance of BaseClass will produce an error. Ancak, bunu devralınmış bir üye olarak kullanma girişimi DerivedClass1 başarılı olur.However, the attempt to use it as an inherited member in DerivedClass1 will succeed.

İkinci dosyada, devralınan bir üye olarak erişim girişimi myValue DerivedClass2 yalnızca Assembly1 içindeki türetilmiş türler tarafından erişilebilen bir hata oluşturur.In the second file, an attempt to access myValue as an inherited member of DerivedClass2 will produce an error, as it is only accessible by derived types in Assembly1.

Assembly1.cs InternalsVisibleToAttribute Bu adları içeriyorsa Assembly2 , türetilmiş sınıfın DerivedClass1 private protected içinde belirtilen üyelere erişimi olur BaseClass .If Assembly1.cs contains an InternalsVisibleToAttribute that names Assembly2, the derived class DerivedClass1 will have access to private protected members declared in BaseClass. InternalsVisibleTo``private protectedüyeleri diğer derlemelerdeki türetilmiş sınıflara görünür hale getirir.InternalsVisibleTo makes private protected members visible to derived classes in other assemblies.

Struct üye olamaz private protected çünkü yapı devralınamaz.Struct members cannot be private protected because the struct cannot be inherited.

C# dili belirtimiC# language specification

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi.For more information, see the C# Language Specification. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.The language specification is the definitive source for C# syntax and usage.

Ayrıca bkz.See also