Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A private protected kulcsszókombináció egy taghozzáférés-módosító. Az osztályból származó és az azt tartalmazó szerelvényben deklarált típusok hozzáférhetnek egy privát védelem alatt álló taghoz. A többi hozzáférési módosítóval való összehasonlítást private protected lásd: Akadálymentességi szintek.
A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.
A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.
Jótanács
Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.
A származtatott típusok csak akkor férhetnek hozzá az alaposztály magánjellegű védett tagjaihoz 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:
// 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;
}
}
Ez a példa két fájlt tartalmaz, Assembly1.cs és Assembly2.cs.
Az első fájl egy nyilvános alaposztályt BaseClassés egy belőle DerivedClass1származtatott típust tartalmaz.
BaseClass rendelkezik egy privát védett taggal, myValue, amelyhez DerivedClass1 öröklött tagként férhet hozzá ugyanabban az állományban.
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 private protected a tagok csak származtatott típusok által érhetők el ugyanazon a szerelvényen belül. Ez a korlátozás a fő különbség protected a (amely lehetővé teszi a hozzáférést származtatott osztályokból bármely szerelvényben) és protected internal (amely lehetővé teszi a hozzáférést bármely osztályból ugyanazon szerelvényen vagy származtatott osztályokon belül bármely szerelvényben).
Ha Assembly1.cs ilyen neveket Assembly2tartalmazInternalsVisibleToAttribute, a származtatott osztály DerivedClass2 hozzáféréssel rendelkezik a következőben BaseClassdeklarált tagokhozprivate protected: .
InternalsVisibleTo láthatóvá teszi a private protected tagokat más szerelvényekben lévő származtatott osztályok számára.
Összehasonlítás más védett hozzáférés-módosítókkal
Az alábbi táblázat a három védett hozzáférés-módosító fő különbségeit foglalja össze:
| Hozzáférés-módosító | Azonos szerelvény, származtatott osztály | Azonos szerelvény, nem származtatott osztály | Különböző szerelvény, származtatott osztály |
|---|---|---|---|
protected |
✔️ | ❌ | ✔️ |
protected internal |
✔️ | ✔️ | ✔️ |
private protected |
✔️ | ❌ | ❌ |
- Akkor használható
protected, ha azt szeretné, hogy bármely szerelvény származtatott osztályai hozzáférjenek a taghoz. - Akkor érdemes használni
protected internal, ha a legmegfelelőbb hozzáférést szeretné elérni (bármely osztály ugyanabban a szerelvényben vagy származtatott osztályban bárhol). - Akkor használja
private protected, ha a legkorlátozottabb védett hozzáférést szeretné használni (csak származtatott osztályok ugyanabban a szerelvényben).
Nem deklarálhat private protected strukturált tagokat, mert a szerkezetek nem örökölhetők.
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.