Megosztás:


védett (C# referencia)

A protected kulcsszó egy taghozzáférés-módosító.

Megjegyzés:

Ez a cikk a hozzáféréssel foglalkozik protected . A protected kulcsszó a protected internal és private protected hozzáférési módosítók része is.

A védett tagokat az osztályán belül és származtatott osztálypéldányokkal érheti el.

A többi hozzáférési módosítóval való összehasonlítást protected lásd: Akadálymentességi szintek.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

Az alaposztály védett tagját csak akkor érheti el származtatott osztályban, ha a hozzáférés a származtatott osztálytípuson keresztül történik. Vegyük például a következő kódszegmenst:

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;
        }
    }
}

Az utasítás baseObject.myValue = 10 hibát generál, mert egy alaposztály-hivatkozáson keresztül éri el a védett tagot (baseObject az BaseClass típushoz tartozik). A védett tagokat csak a származtatott osztálytípuson vagy az abból származtatott típusokon keresztül érheti el.

Ellentétben private protecteda protected hozzáférés-módosító lehetővé teszi a hozzáférést a származtatott osztályokból bármely szerelvényben. Ellentétben protected internalazzal, hogy nem engedélyezi a hozzáférést nem származtatott osztályokból ugyanazon a szerelvényen belül.

Nem deklarálhatja az struct tagokat védettként, mert a szerkezetek nem örökölhetők.

Ebben a példában az osztály DerivedPoint a következőből Pointszármazik: . Ezért az alaposztály védett tagjait közvetlenül a származtatott osztályból érheti el.

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
}

Ha a hozzáférési szinteket xyprivátra módosítja, a fordító a következő hibaüzeneteket adja vissza:

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

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

Az alábbi példa bemutatja, hogy protected a tagok akkor is elérhetők származtatott osztályokból, ha különböző szerelvényekben vannak:

// 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;
        }
    }
}

Ez a szerelvények közötti hozzáférés az, ami megkülönbözteti protectedprivate protected-től (amely korlátozza a hozzáférést ugyanahhoz a szerelvényhez), de hasonló a protected internal-hoz (bár a protected internal a nem származtatott osztályokból is lehetővé teszi az ugyanazon szerelvény elérését).

C# nyelvspecifikáció

További információ: Deklarált akadálymentesség a C# nyelvi specifikációjában. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.

Lásd még