Share via


privat skyddad (C#-referens)

Nyckelordskombinationen private protected är en medlemsåtkomstmodifierare. En privat skyddad medlem kan nås av typer som härleds från den innehållande klassen, men endast inom dess innehållande sammansättning. En jämförelse av private protected med de andra åtkomstmodifierarna finns i Hjälpmedelsnivåer.

Kommentar

Åtkomstmodifieraren private protected är giltig i C#-version 7.2 och senare.

Exempel

En privat skyddad medlem i en basklass är endast tillgänglig från härledda typer i dess innehållande sammansättning om variabelns statiska typ är den härledda klasstypen. Tänk till exempel på följande kodsegment:

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

Det här exemplet innehåller två filer Assembly1.cs och Assembly2.cs. Den första filen innehåller en offentlig basklass, BaseClass, och en typ som härleds från den, DerivedClass1. BaseClass äger en privat skyddad medlem, myValue, som DerivedClass1 försöker komma åt på två sätt. Det första försöket att komma åt myValue via en instans av BaseClass genererar ett fel. Försöket att använda det som en ärvd medlem i DerivedClass1 lyckas dock.

I den andra filen skapar ett försök att komma åt myValue som en ärvd medlem DerivedClass2 i ett fel, eftersom det endast är tillgängligt för härledda typer i Assembly1.

Om Assembly1.cs innehåller ett InternalsVisibleToAttribute namn Assembly2har den härledda klassen DerivedClass2 åtkomst till private protected medlemmar som deklarerats i BaseClass. InternalsVisibleTo gör private protected medlemmar synliga för härledda klasser i andra sammansättningar.

Struct-medlemmar kan inte bero private protected på att structen inte kan ärvas.

Språkspecifikation för C#

Mer information finns i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.

Se även