privébeveiliging (C#-verwijzing)

De private protected combinatie van trefwoorden is een wijziging voor lidtoegang. Een privé beveiligd lid is toegankelijk op basis van typen die zijn afgeleid van de betreffende klasse, maar alleen binnen de bijbehorende assembly. Zie Toegankelijkheidsniveaus voor een vergelijking van private protected de andere toegangsaanpassingen.

Notitie

De private protected toegangsaanpassing is geldig in C#-versie 7.2 en hoger.

Opmerking

Een privé beveiligd lid van een basisklasse is alleen toegankelijk vanuit afgeleide typen in de bijbehorende assembly als het statische type van de variabele het afgeleide klassetype is. Denk bijvoorbeeld aan het volgende codesegment:

public class BaseClass
{
    private protected int myValue = 0;
}

public class DerivedClass1 : BaseClass
{
    void Access()
    {
        var baseObject = new BaseClass();

        // Error CS1540, because myValue can only be accessed by
        // classes derived from BaseClass.
        // baseObject.myValue = 5;

        // OK, accessed through the current derived class instance
        myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass2 : BaseClass
{
    void Access()
    {
        // Error CS0122, because myValue can only be
        // accessed by types in Assembly1
        // myValue = 10;
    }
}

Dit voorbeeld bevat twee bestanden en Assembly1.csAssembly2.cs. Het eerste bestand bevat een openbare basisklasse BaseClassen een type dat ervan is afgeleid. DerivedClass1 BaseClass is eigenaar van een privé beveiligd lid, myValuedat DerivedClass1 op twee manieren toegang probeert te krijgen. Bij de eerste poging om toegang myValue te krijgen via een exemplaar van een exemplaar, BaseClass treedt er een fout op. De poging om het als overgenomen lid te gebruiken, slaagt er echter wel in DerivedClass1 .

In het tweede bestand wordt een poging om toegang te krijgen myValue als overgenomen lid van DerivedClass2 een fout veroorzaakt, omdat deze alleen toegankelijk is door afgeleide typen in Assembly1.

Als Assembly1.cs deze namen InternalsVisibleToAttributeAssembly2bevat, heeft de afgeleide klasse DerivedClass2 toegang tot private protected leden die zijn gedeclareerd in BaseClass. InternalsVisibleTo maakt private protected leden zichtbaar voor afgeleide klassen in andere assembly's.

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

C#-taalspecificatie

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

Zie ook