Aracılığıyla paylaş


protected internal (C# Başvurusu)

Anahtar protected internal sözcük bileşimi bir üye erişim değiştiricidir. Korumalı iç üyeye geçerli derlemeden veya içeren sınıftan türetilen türlerden erişilebilir. Diğer erişim değiştiricileriyle karşılaştırması protected internal için bkz . Erişilebilirlik Düzeyleri.

Örnek

Bir temel sınıfın korumalı iç üyesine, içeren derleme içindeki herhangi bir türden erişilebilir. Ayrıca başka bir derlemede bulunan türetilmiş bir sınıfta da erişilebilir ancak erişim türetilmiş sınıf türünün bir değişkeni aracılığıyla gerçekleşirse. Örneğin, aşağıdaki kod kesimini göz önünde bulundurun:

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

class TestAccess
{
    void Access()
    {
        var baseObject = new BaseClass();
        baseObject.myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
    static void Main()
    {
        var baseObject = new BaseClass();
        var derivedObject = new DerivedClass();

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

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

Bu örnek, Assembly1.cs ve Assembly2.cs adlı iki dosya içerir. İlk dosya bir ortak temel sınıf içerir, BaseClassve başka bir sınıf, TestAccess. BaseClass, aynı derlemede oldukları için myValue türü tarafından erişilen korumalı bir iç üyeye, TestAccess, sahiptir. İkinci dosyada, myValue örneği üzerinden BaseClass'e erişim girişimi bir hataya neden olurken, türetilmiş bir sınıfın DerivedClass örneği aracılığıyla bu üyeye erişim başarılı olur. Bu, protected internal veya herhangi bir derlemedeki türetilmiş sınıflardan erişime izin vererek korunan erişim değiştiricilerinin en uygun olduğunu gösterir.

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

Korumalı iç üyeleri geçersiz kılma

Bir sanal üye geçersiz kılınırken, geçersiz kılınan yöntemin erişilebilirlik değiştiricisi türetilmiş sınıfın tanımlandığı derlemeye bağlıdır.

Türetilmiş sınıf, temel sınıfla aynı derlemede tanımlandığında, geçersiz kılınan tüm üyeler protected internal erişim düzeyine sahip olur. Türetilmiş sınıf, temel sınıftan farklı bir derlemede tanımlanmışsa, geçersiz kılınan üyeler protected erişime sahiptir.

// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
    protected internal virtual int GetExampleValue()
    {
        return 5;
    }
}

public class DerivedClassSameAssembly : BaseClass
{
    // Override to return a different example value, accessibility modifiers remain the same.
    protected internal override int GetExampleValue()
    {
        return 9;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClassDifferentAssembly : BaseClass
{
    // Override to return a different example value, since this override
    // method is defined in another assembly, the accessibility modifiers
    // are only protected, instead of protected internal.
    protected override int GetExampleValue()
    {
        return 2;
    }
}

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