Megosztás a következőn keresztül:


védett belső (C# referencia)

A protected internal kulcsszókombináció egy taghozzáférés-módosító. A védett belső tag az aktuális szerelvényből vagy az azt tartalmazó osztályból származó típusokból érhető el. A többi hozzáférési módosítóval való összehasonlítást protected internal lásd : Akadálymentességi szintek.

Példa

Az alaposztály védett belső tagja az azt tartalmazó szerelvényen belül bármilyen típusból elérhető. Egy másik szerelvényben található származtatott osztályban is elérhető, ha a hozzáférés a származtatott osztálytípus változója révén történik. Vegyük például a következő kódszegmenst:

// 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;
    }
}

Ez a példa két fájlt Assembly1.cs és Assembly2.cs. Az első fájl egy nyilvános alaposztályt és BaseClassegy másik osztályt TestAccesstartalmaz. BaseClass egy védett belső tagot birtokol, myValueamelyet a TestAccess típus ér el. A második fájlban egy példányon keresztüli hozzáférés myValue kísérlete BaseClass hibát eredményez, míg a taghoz egy származtatott osztály DerivedClass egy példányán keresztüli hozzáférés sikeres lesz.

A szerkezet tagjai nem lehetnek protected internal , mert a szerkezet nem örökölhető.

Védett belső tagok felülírása

Egy virtuális tag felülírásakor a felülírt metódus akadálymentességi módosítója attól a szerelvénytől függ, amelyben a származtatott osztály definiálva van.

Ha a származtatott osztály ugyanabban a szerelvényben van definiálva, mint az alaposztály, minden felülírt tag rendelkezik protected internal hozzáféréssel. Ha a származtatott osztály az alaposztálytól eltérő szerelvényben van definiálva, a felülírt tagok hozzáféréssel rendelkeznek protected .

// 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# nyelvspecifikáció

További információkért lásd a C# nyelvi specifikációját. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.

Lásd még