Dela via


privat skyddad (C#-referens)

Nyckelordskombinationen private protected är en medlemsåtkomstmodifierare. Typer som härleds från klassen och deklareras i den innehållande sammansättningen kan komma åt en privat skyddad medlem. En jämförelse av private protected med de andra åtkomstmodifierarna finns i Hjälpmedelsnivåer.

C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.

Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.

Tips/Råd

Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.

Härledda typer kan endast komma åt en privat skyddad medlem i en basklass i dess innehållande sammansättning om variabelns statiska typ är den härledda klasstypen. Tänk till exempel på följande kodsegment:

// Assembly1.cs
// Compile with: /target:library
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 kan komma åt som en ärvd medlem i samma sammansättning.

I den andra filen genererar ett försök att komma åt myValue som en ärvd medlem DerivedClass2 i ett fel, eftersom private protected medlemmar endast är tillgängliga av härledda typer inom samma sammansättning. Den här begränsningen är den viktigaste skillnaden från protected (som tillåter åtkomst från härledda klasser i alla sammansättningar) och protected internal (som tillåter åtkomst från vilken klass som helst inom samma sammansättning eller härledda klasser i alla sammansättningar).

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.

Jämförelse med andra skyddade åtkomstmodifierare

I följande tabell sammanfattas de viktigaste skillnaderna mellan de tre skyddade åtkomstmodifierarna:

Åtkomstmodifierare Samma sammansättning, härledd klass Samma sammansättning, icke-härledd klass Annan sammansättning, härledd klass
protected ✔️ ✔️
protected internal ✔️ ✔️ ✔️
private protected ✔️
  • Använd protected när du vill att härledda klasser i en sammansättning ska få åtkomst till medlemmen.
  • Använd protected internal när du vill ha den mest tillåtande åtkomsten (alla klasser i samma sammansättning eller härledda klasser var som helst).
  • Använd private protected när du vill ha den mest restriktiva skyddade åtkomsten (endast härledda klasser i samma sammansättning).

Du kan inte deklarera private protected struct-medlemmar eftersom structs 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