private protected (Referenční dokumentace jazyka C#)
Kombinace private protected
klíčových slov je modifikátor přístupu člena. Soukromý chráněný člen je přístupný pomocí typů odvozených z obsahující třídy, ale pouze v rámci jeho sestavení. Porovnání private protected
s ostatními modifikátory přístupu najdete v tématu Úrovně přístupnosti.
Poznámka:
private protected
Modifikátor přístupu je platný v jazyce C# verze 7.2 a novější.
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. Představte si 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 odvozený z něj, DerivedClass1
. BaseClass
vlastní soukromý chráněný člen , myValue
který DerivedClass1
se pokusí o přístup dvěma způsoby. První pokus o přístup myValue
prostřednictvím instance BaseClass
způsobí chybu. Pokus o jeho použití jako zděděný člen však DerivedClass1
bude úspěšný.
Ve druhém souboru se pokus o přístup myValue
jako zděděný člen DerivedClass2
vytvoří chybu, protože je přístupný pouze odvozenými typy v Sestavení1.
Pokud Assembly1.cs
obsahuje tento název Assembly2
, odvozená třída DerivedClass2
bude mít přístup k private protected
členům deklarovaným v BaseClass
InternalsVisibleToAttribute . InternalsVisibleTo
zviditelňuje private protected
členy odvozené třídy v jiných sestaveních.
Členy struktury nemohou být private protected
, protože strukturu nelze 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#.