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#.

Viz také