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 internal kulcsszókombináció egy taghozzáférés-módosító. A védett belső tagokat az aktuális szerelvényből vagy az azt tartalmazó osztályból származó típusokból érheti el. A többi hozzáférési módosítóval való összehasonlítást protected internal 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.
A szerelvényen belül bármilyen típus hozzáférhet egy alaposztály védett belső tagához. Egy másik szerelvényben található származtatott osztály csak akkor férhet hozzá a taghoz, 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 tartalmaz, Assembly1.cs és Assembly2.cs.
Az első fájl egy nyilvános alaposztályt és BaseClassegy másik osztályt TestAccesstartalmaz.
BaseClassegy védett belső tagot birtokol, amelyhez a TestAccess típus azért fér hozzá, myValuemert ugyanabban a szerelvényben vannak.
A második fájlban egy példányon BaseClass keresztüli hozzáférés myValue kísérlete hibát eredményez, míg a taghoz való hozzáférés egy származtatott osztály DerivedClass egy példányán keresztül sikeres. Ez a hozzáférési szabály azt mutatja be, hogy protected internal bármely szerelvény egyazon szerelvény vagy származtatott osztálybármelyik osztályából engedélyezi a hozzáférést, így ez a védett hozzáférés-módosítók számára a legmegfelelőbb.
A szerkezet tagjai nem lehetnek protected internal , mert a szerkezet nem örökölhető.
Védett belső tagok felülírása
Ha felülbírál egy virtuális tagot, a felülbírált metódus akadálymentességi módosítója attól a szerelvénytől függ, amelyben a származtatott osztályt definiálja.
Ha a származtatott osztályt ugyanabban a szerelvényben definiálja, mint az alaposztály, az összes felülírt tag rendelkezik protected internal hozzáféréssel. Ha az alaposztálytól eltérő szerelvényben definiálja a származtatott osztályt, akkor 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.