Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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.