privát védelem (C#-referencia)
A private protected
kulcsszókombináció egy taghozzáférés-módosító. A privát védelem alatt álló tagok az adott osztályból származó típusok szerint érhetők el, de csak az azt tartalmazó szerelvényen belül. A többi hozzáférési módosítóval való összehasonlítást private protected
lásd : Akadálymentességi szintek.
Feljegyzés
A private protected
hozzáférés-módosító a C# 7.2-es és újabb verziójában érvényes.
Példa
Az alaposztály magánvédett tagja csak akkor érhető el származtatott típusokból a szerelvényben, ha a változó statikus típusa a származtatott osztálytípus. Vegyük például a következő kódszegmenst:
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;
}
}
Ez a példa két fájlt Assembly1.cs
és Assembly2.cs
.
Az első fájl egy nyilvános alaposztályt BaseClass
és egy belőle DerivedClass1
származtatott típust tartalmaz. BaseClass
tulajdonosa egy privát védelem alatt álló tag, myValue
amely DerivedClass1
kétféleképpen próbál hozzáférni. Az első kísérlet, amely egy példányon BaseClass
keresztül próbál hozzáférnimyValue
, hibát fog eredményezni. Azonban az öröklött tagként DerivedClass1
való használatra tett kísérlet sikeres lesz.
A második fájlban az öröklött tagként való hozzáférés myValue
kísérlete DerivedClass2
hibát eredményez, mivel az csak a Assembly1 származtatott típusai számára érhető el.
Ha Assembly1.cs
ilyen neveket Assembly2
tartalmazInternalsVisibleToAttribute, a származtatott osztály DerivedClass2
hozzáféréssel rendelkezik a következőben BaseClass
deklarált tagokhozprivate protected
: . InternalsVisibleTo
láthatóvá teszi private protected
a tagokat más szerelvények származtatott osztályai számára.
A szerkezet tagjai nem lehetnek private protected
, mert a szerkezet nem örökölhető.
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.