Private Protected (Referenční dokumentace jazyka C#)
private protectedKombinace klíčového slova je modifikátor přístupu ke členu. Soukromý chráněný člen je přístupný z typů odvozených z obsahující třídy, ale pouze v rámci nadřazeného sestavení. Porovnání private protected s dalšími modifikátory přístupu najdete v tématu úrovně usnadnění.
Poznámka
private protectedModifikátor přístupu je platný v jazyce C# verze 7,2 a novějším.
Příklad
Soukromý chráněný člen základní třídy je přístupný z odvozených typů v jeho obsahujícím sestavení pouze v případě, že statický typ proměnné je odvozený typ třídy. Zvažte například následující segment kódu:
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, BaseClass a typ, který je z něj odvozený DerivedClass1 . BaseClass vlastní soukromý chráněný člen, myValue , který se DerivedClass1 snaží získat přístup dvěma způsoby. Při prvním pokusu o přístup myValue prostřednictvím instance BaseClass se vytvoří chyba. Pokus o jeho použití jako zděděný člen v nástroji bude ale DerivedClass1 úspěšný.
Ve druhém souboru dojde k chybě pokusu o přístup myValue jako zděděný člen DerivedClass2 , protože je přístupný pouze pro odvozené typy v Assembly1.
Pokud Assembly1.cs obsahuje InternalsVisibleToAttribute název Assembly2 , odvozená třída DerivedClass2 bude mít přístup ke private protected členům deklarovaným v BaseClass . InternalsVisibleTo zpřístupňuje private protected členy na odvozených třídách v jiných sestaveních.
Členy struktury nemůžou být private protected zděděné, protože strukturu nejde zdědit.
specifikace jazyka C#
Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.