Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kombinace private protected klíčových slov je modifikátor přístupu člena. Typy odvozené z třídy a jsou deklarovány v obsahující sestavení mohou přistupovat k soukromého chráněného členu. Porovnání private protected s ostatními modifikátory přístupu najdete v tématu Úrovně přístupnosti.
Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.
Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.
Návod
Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.
Odvozené typy mohou přistupovat k privátnímu chráněnému členu základní třídy v jeho obsahujícím sestavení pouze v případě, že statický typ proměnné je odvozený typ třídy. Představte si například následující segment kódu:
// 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;
}
}
Tento příklad obsahuje dva soubory Assembly1.cs a Assembly2.cs.
První soubor obsahuje veřejnou základní třídu BaseClassa typ odvozený z něj, DerivedClass1.
BaseClass obsahuje privátní chráněný člen, myValue, ke kterému DerivedClass1 může přistupovat jako ke zděděnému členu v rámci stejného sestavení.
Ve druhém souboru se pokus o přístup myValue jako zděděný člen DerivedClass2 vytvoří chybu, protože private protected členy jsou přístupné pouze odvozenými typy ve stejném sestavení. Toto omezení je klíčovým rozdílem od protected (který umožňuje přístup z odvozených tříd v libovolném sestavení) a protected internal (který umožňuje přístup z jakékoli třídy v rámci stejného sestavení nebo odvozených tříd v libovolném sestavení).
Pokud Assembly1.cs obsahuje tento název Assembly2, odvozená třída DerivedClass2 má přístup k private protected členům deklarovaným v BaseClassInternalsVisibleToAttribute .
InternalsVisibleTo zviditelňuje private protected členy odvozené třídy v jiných sestaveních.
Porovnání s dalšími modifikátory chráněného přístupu
Následující tabulka shrnuje klíčové rozdíly mezi třemi modifikátory chráněného přístupu:
| Modifikátor přístupu | Stejné sestavení, odvozená třída | Stejné sestavení, neodvozená třída | Různé sestavení, odvozená třída |
|---|---|---|---|
protected |
✔️ | ❌ | ✔️ |
protected internal |
✔️ | ✔️ | ✔️ |
private protected |
✔️ | ❌ | ❌ |
- Použijte
protected, pokud chcete odvozené třídy v libovolném sestavení pro přístup k členu. - Použijte
protected internal, pokud chcete nejpřímější přístup (libovolná třída ve stejném sestavení nebo odvozených třídách kdekoli). - Použijte
private protected, pokud chcete nejvíce omezující chráněný přístup (pouze odvozené třídy ve stejném sestavení).
Členy struktury nelze deklarovat private protected , protože struktury nelze zdědit.
Specifikace jazyka C#
Další informace najdete ve specifikaci jazyka C#. Specifikace jazyka je konečným zdrojem syntaxe a použití jazyka C#.