védett belső (C# referencia)
A protected internal
kulcsszókombináció egy taghozzáférés-módosító. A védett belső tag az aktuális szerelvényből vagy az azt tartalmazó osztályból származó típusokból érhető el. A többi hozzáférési módosítóval való összehasonlítást protected internal
lásd : Akadálymentességi szintek.
Példa
Az alaposztály védett belső tagja az azt tartalmazó szerelvényen belül bármilyen típusból elérhető. Egy másik szerelvényben található származtatott osztályban is elérhető, ha a hozzáférés a származtatott osztálytípus változója révén történik. Vegyük például a következő kódszegmenst:
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal int myValue = 0;
}
class TestAccess
{
void Access()
{
var baseObject = new BaseClass();
baseObject.myValue = 5;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
static void Main()
{
var baseObject = new BaseClass();
var derivedObject = new DerivedClass();
// Error CS1540, because myValue can only be accessed by
// classes derived from BaseClass.
// baseObject.myValue = 10;
// OK, because this class derives from BaseClass.
derivedObject.myValue = 10;
}
}
Ez a példa két fájlt Assembly1.cs
és Assembly2.cs
.
Az első fájl egy nyilvános alaposztályt és BaseClass
egy másik osztályt TestAccess
tartalmaz. BaseClass
egy védett belső tagot birtokol, myValue
amelyet a TestAccess
típus ér el.
A második fájlban egy példányon keresztüli hozzáférés myValue
kísérlete BaseClass
hibát eredményez, míg a taghoz egy származtatott osztály DerivedClass
egy példányán keresztüli hozzáférés sikeres lesz.
A szerkezet tagjai nem lehetnek protected internal
, mert a szerkezet nem örökölhető.
Védett belső tagok felülírása
Egy virtuális tag felülírásakor a felülírt metódus akadálymentességi módosítója attól a szerelvénytől függ, amelyben a származtatott osztály definiálva van.
Ha a származtatott osztály ugyanabban a szerelvényben van definiálva, mint az alaposztály, minden felülírt tag rendelkezik protected internal
hozzáféréssel. Ha a származtatott osztály az alaposztálytól eltérő szerelvényben van definiálva, a felülírt tagok hozzáféréssel rendelkeznek protected
.
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal virtual int GetExampleValue()
{
return 5;
}
}
public class DerivedClassSameAssembly : BaseClass
{
// Override to return a different example value, accessibility modifiers remain the same.
protected internal override int GetExampleValue()
{
return 9;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClassDifferentAssembly : BaseClass
{
// Override to return a different example value, since this override
// method is defined in another assembly, the accessibility modifiers
// are only protected, instead of protected internal.
protected override int GetExampleValue()
{
return 2;
}
}
C# nyelvspecifikáció
További információkért lásd a C# nyelvi specifikációját. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: