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 Assembly2
har 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.