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 protected sözcük bir üye erişim değiştiricidir.
Uyarı
Bu sayfa protected erişime kapsar.
protected anahtar kelimesi, protected internal ve private protected erişim değiştiricilerinin de bir parçasıdır.
Korumalı üyeye sınıfı içinde ve türetilmiş sınıf örnekleri tarafından erişilebilir.
Diğer erişim değiştiricileriyle karşılaştırması protected için bkz . Erişilebilirlik Düzeyleri.
Örnek 1
Temel sınıfın korumalı bir üyesi, türetilmiş bir sınıfta yalnızca erişim türetilmiş sınıf türü aracılığıyla gerçekleşirse erişilebilir. Ö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şilebilir.
'den farklı olarakprivate protectedprotected, erişim değiştiricisi herhangi bir derlemedeki türetilmiş sınıflardan erişime izin verir. aksine protected internal, aynı derleme içindeki türetilmemiş sınıflardan erişime izin vermez .
Yapı devralınamadığı için, yapı üyeleri korumalı olamaz.
Örnek 2
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 xy olarak değiştirirseniz, derleyici şu hata iletilerini yayımlar:
'Point.y' is inaccessible due to its protection level.
'Point.x' is inaccessible due to its protection level.
Çapraz montaj erişimi
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.