Share via


beveiligd intern (C#-verwijzing)

De protected internal combinatie van trefwoorden is een wijziging voor lidtoegang. Een beveiligd intern lid is toegankelijk vanuit de huidige assembly of van typen die zijn afgeleid van de inhoudsklasse. Zie Toegankelijkheidsniveaus voor een vergelijking van protected internal de andere toegangsaanpassingen.

Opmerking

Een beveiligd intern lid van een basisklasse is toegankelijk vanaf elk type in de bijbehorende assembly. Het is ook alleen toegankelijk in een afgeleide klasse die zich in een andere assembly bevindt als de toegang plaatsvindt via een variabele van het afgeleide klassetype. Denk bijvoorbeeld aan het volgende codesegment:

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

Dit voorbeeld bevat twee bestanden en Assembly1.csAssembly2.cs. Het eerste bestand bevat een openbare basisklasse, BaseClassen een andere klasse, TestAccess. BaseClass is eigenaar van een beveiligd intern lid, myValuedat wordt geopend door het TestAccess type. In het tweede bestand treedt er een fout op bij een poging om toegang myValue te krijgen via een exemplaar van een exemplaar van BaseClass een afgeleide klasse, terwijl een toegang tot dit lid via een exemplaar van een afgeleide klasse DerivedClass slaagt.

Struct-leden kunnen niet zijn protected internal omdat de struct niet kan worden overgenomen.

Beveiligde interne leden overschrijven

Wanneer u een virtueel lid overschrijft, is de toegankelijkheidsaanpassing van de overschreven methode afhankelijk van de assembly waarin de afgeleide klasse is gedefinieerd.

Wanneer de afgeleide klasse wordt gedefinieerd in dezelfde assembly als de basisklasse, hebben protected internal alle overschreven leden toegang. Als de afgeleide klasse is gedefinieerd in een andere assembly dan de basisklasse, hebben protected overschreven leden toegang.

// 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#-taalspecificatie

Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.

Zie ook