Aracılığıyla paylaş


protected (C# Referansı)

Anahtar protected sözcük bir üye erişim değiştiricidir.

Uyarı

Bu makale erişim konularını kapsar protected . protected anahtar kelimesi, protected internal ve private protected erişim değiştiricilerinin de bir parçasıdır.

Korumalı bir üyeye sınıfı içinde ve türetilmiş sınıf örnekleriyle erişebilirsiniz.

Diğer erişim değiştiricileriyle karşılaştırması protected için bkz . Erişilebilirlik Düzeyleri.

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.

Türetilmiş bir sınıftaki bir temel sınıfın korumalı üyesine yalnızca erişim türetilmiş sınıf türü aracılığıyla gerçekleşirse erişebilirsiniz. Örneğin, aşağıdaki kod kesimini göz önünde bulundurun:

namespace Example1
{
    class BaseClass
    {
        protected int myValue = 123;
    }

    class DerivedClass : BaseClass
    {
        static void Main()
        {
            var baseObject = new BaseClass();
            var derivedObject = new DerivedClass();

            // Error CS1540, because myValue can only be accessed through
            // the derived class type, not through the base class type.
            // baseObject.myValue = 10;

            // OK, because this class derives from BaseClass.
            derivedObject.myValue = 10;
        }
    }
}

baseObject.myValue = 10 ifadesi, temel sınıf referansı (baseObject türünde BaseClass) üzerinden korunan üyeye eriştiğinden hata verir. Korumalı üyelere yalnızca türetilmiş sınıf türü veya ondan türetilen türler aracılığıyla erişebilirsiniz.

'den farklı olarakprivate protectedprotected, erişim değiştiricisi herhangi bir derlemedeki türetilmiş sınıflardan erişime izin verir. 'den farklı olarak protected internal, aynı derleme içindeki türetilmemiş sınıflardan erişime izin vermez.

Yapılar devralınamadığı için yapı üyelerini korumalı olarak bildiremezsiniz.

Bu örnekte sınıfı DerivedPoint öğesinden Pointtüretilmiştir. Bu nedenle, temel sınıfın korumalı üyelerine doğrudan türetilmiş sınıftan erişebilirsiniz.

namespace Example2
{
    class Point
    {
        protected int x;
        protected int y;
    }

    class DerivedPoint: Point
    {
        static void Main()
        {
            var dpoint = new DerivedPoint();

            // Direct access to protected members.
            dpoint.x = 10;
            dpoint.y = 15;
            Console.WriteLine($"x = {dpoint.x}, y = {dpoint.y}");
        }
    }
    // Output: x = 10, y = 15
}

ve erişim düzeylerini xözel olarak değiştirirseniz, derleyici şu hata iletilerini döndürür:y

'Point.y' is inaccessible due to its protection level.

'Point.x' is inaccessible due to its protection level.

Aşağıdaki örnek, farklı derlemelerde olsalar bile protected üyelerinin türetilmiş olan sınıflardan erişilebilir olduğunu gösterir.

// Assembly1.cs
// Compile with: /target:library
namespace Assembly1
{
    public class BaseClass
    {
        protected int myValue = 0;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
namespace Assembly2
{
    using Assembly1;
    
    class DerivedClass : BaseClass
    {
        void Access()
        {
            // OK, because protected members are accessible from
            // derived classes in any assembly
            myValue = 10;
        }
    }
}

Bu çapraz bütünleştirilmiş kod erişilebilirliği, protected'yi, (aynı derlemeye erişimi kısıtlayan) private protected'den ayırt eder, ancak protected internal ile benzerdir (fakat protected internal türetilmemiş sınıflardan aynı derleme erişimine de izin verir).

C# dil belirtimi

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

Ayrıca bakınız