Sdílet prostřednictvím


protected (Referenční dokumentace jazyka C#)

Klíčové protected slovo je modifikátor přístupu člena.

Poznámka:

Tento článek popisuje protected přístup. Klíčové protected slovo je také součástí protected internal a private protected modifikátorů přístupu.

Přístup k chráněnému členu v rámci třídy a odvozených instancí třídy.

Porovnání 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#.

K chráněnému členu základní třídy v odvozené třídě můžete přistupovat pouze v případě, že k přístupu dochází prostřednictvím odvozeného typu třídy. Představte si například následující segment kódu:

namespace Example1
{
    class BaseClass
    {
        protected int myValue = 123;
    }

    class DerivedClass : BaseClass
    {
        static void Main()
        {
            var baseObject = new BaseClass();
            var derivedObject = new DerivedClass();

            // Error CS1540, because myValue can only be accessed through
            // the derived class type, not through the base class type.
            // baseObject.myValue = 10;

            // OK, because this class derives from BaseClass.
            derivedObject.myValue = 10;
        }
    }
}

baseObject.myValue = 10 Příkaz vygeneruje chybu, protože přistupuje k chráněnému členu prostřednictvím odkazu základní třídy (baseObject je typuBaseClass). K chráněným členům můžete přistupovat pouze prostřednictvím odvozeného typu třídy nebo typů odvozených z ní.

Na rozdíl od private protectedmodifikátoru protected přístupu umožňuje přístup z odvozených tříd v libovolném sestavení. Na rozdíl od protected internal, to neumožňuje přístup z ne-odvozené třídy v rámci stejného sestavení.

Členy struktury nelze deklarovat jako chráněné, protože struktury nelze zdědit.

V tomto příkladu je třída DerivedPoint odvozena z Point. Proto můžete přistupovat k chráněným členům základní třídy přímo z odvozené třídy.

namespace Example2
{
    class Point
    {
        protected int x;
        protected int y;
    }

    class DerivedPoint: Point
    {
        static void Main()
        {
            var dpoint = new DerivedPoint();

            // Direct access to protected members.
            dpoint.x = 10;
            dpoint.y = 15;
            Console.WriteLine($"x = {dpoint.x}, y = {dpoint.y}");
        }
    }
    // Output: x = 10, y = 15
}

Pokud změníte úrovně x přístupu a yna soukromé, kompilátor vrátí chybové zprávy:

'Point.y' is inaccessible due to its protection level.

'Point.x' is inaccessible due to its protection level.

Následující příklad ukazuje, že členy protected jsou přístupné i z odvozených tříd, přestože jsou v různých sestaveních:

// Assembly1.cs
// Compile with: /target:library
namespace Assembly1
{
    public class BaseClass
    {
        protected int myValue = 0;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
namespace Assembly2
{
    using Assembly1;
    
    class DerivedClass : BaseClass
    {
        void Access()
        {
            // OK, because protected members are accessible from
            // derived classes in any assembly
            myValue = 10;
        }
    }
}

Tato přístupnost křížového sestavení je to, co rozlišuje protected od private protected (které omezuje přístup ke stejnému sestavení), ale je podobná protected internal (i když protected internal také umožňuje přístup ke stejnému sestavení z tříd, které nejsou odvozené).

Specifikace jazyka C#

Další informace naleznete v tématu Deklarovaná přístupnost ve specifikaci jazyka C#. Specifikace jazyka je konečným zdrojem syntaxe a použití jazyka C#.

Viz také