Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Alle typen en typen leden hebben een toegankelijkheidsniveau. Het toegankelijkheidsniveau bepaalt of andere code in uw assembly of andere assembly's deze kunnen gebruiken. Een assembly is een .dll of .exe gemaakt door een of meer .cs bestanden te compileren in één compilatie. Gebruik de volgende toegangsaanpassingen om de toegankelijkheid van een type of lid op te geven wanneer u deze declareert:
- openbaar: Code in elke assembly heeft toegang tot dit type of lid. Het toegankelijkheidsniveau van het betreffende type bepaalt het toegankelijkheidsniveau van openbare leden van het type.
-
privé: alleen code die in hetzelfde
classis gedeclareerd ofstructtoegang heeft tot dit lid. -
beveiligd: Alleen code in hetzelfde
classof in een afgeleideclasscode heeft toegang tot dit type of lid. - intern: Alleen code in dezelfde assembly heeft toegang tot dit type of lid.
- beveiligd intern: alleen code in dezelfde assembly of in een afgeleide klasse in een andere assembly heeft toegang tot dit type of lid.
- privé beveiligd: alleen code in dezelfde assembly en in dezelfde klasse of een afgeleide klasse heeft toegang tot het type of lid.
Gebruik de file-modificator voor de typen op het hoogste niveau (niet-geneste). De file wijzigingsfunctie beperkt de toegang tot code in hetzelfde bronbestand. U kunt de file wijzigingsfunctie niet combineren met een wijzigingsfunctie voor toegang.
De record wijzigingsfunctie voor een type zorgt ervoor dat de compiler extra ledensynthetiseert. De record wijzigingsfunctie heeft geen invloed op de standaardtoegankelijkheid voor een record class of een record struct.
Samenvattingstabel
| Locatie van beller | public |
protected internal |
protected |
internal |
private protected |
private |
|---|---|---|---|---|---|---|
| Binnen de klas | ✔️️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Afgeleide klasse (dezelfde assembly) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| Niet-afgeleide klasse (dezelfde assembly) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ❌ |
| Afgeleide klasse (verschillende assembly) | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Niet-afgeleide klasse (verschillende assembly) | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ |
In de volgende voorbeelden ziet u hoe u toegangsaanpassingen opgeeft voor een type en lid:
public class Bicycle
{
public void Pedal() { }
}
Niet alle toegangsaanpassingen zijn geldig voor alle typen of leden in alle contexten. In sommige gevallen beperkt de toegankelijkheid van het betreffende type de toegankelijkheid van de leden.
Meerdere declaraties van een gedeeltelijke klasse of gedeeltelijk lid moeten dezelfde toegankelijkheid hebben. Als een declaratie geen wijzigingsfunctie voor toegang bevat, kunnen de andere declaraties geen wijzigingsfunctie voor toegang declareren. De compiler genereert een fout als meerdere declaraties voor de gedeeltelijke klasse of methode verschillende toegankelijkheidsproblemen declareren.
Toegankelijkheid van klassen en struct
Klassen en structs die rechtstreeks in een naamruimte zijn gedeclareerd (niet genest binnen andere klassen of structs) kunnen public- of internal-toegang hebben. Als u geen toegangsaanpassing opgeeft, is de standaardwaarde internal. U kunt de file wijzigingsfunctie ook gebruiken om de toegang tot het huidige bronbestand te beperken.
U kunt struct-leden, inclusief geneste klassen en structs, als public, internal of private. U kunt klasseleden, inclusief geneste klassen en structs, declareren als public, protected internal, protected, internal, private protected of private. Klassen- en struct-leden, inclusief geneste klassen en structs, hebben private standaard toegang.
Afgeleide klassen kunnen geen grotere toegankelijkheid hebben dan hun basistypen. U kunt geen openbare klasse B declareren die is afgeleid van een interne klasse A. Indien toegestaan, zou dit het effect hebben om openbaar te maken A , omdat alle protected of internal leden van A de afgeleide klasse toegankelijk zijn.
U kunt specifieke andere assembly's inschakelen voor toegang tot uw interne typen met behulp van de InternalsVisibleToAttribute. Zie Vriendenassembly's voor meer informatie.
Andere typen
U kunt interfaces rechtstreeks in een naamruimte declareren als public of internal. Net als klassen en structs hebben interfaces standaardinternal toegangsniveau. Interfaceleden zijn public standaard omdat het doel van een interface is om andere typen toegang te geven tot een klasse of struct. Declaraties van interfaceleden kunnen eventuele toegangsaanpassingen bevatten. Gebruik toegangsaanpassingen voor interface leden om een gemeenschappelijke implementatie te bieden die nodig is voor alle implementors van een interface.
Een delegate type dat rechtstreeks in een naamruimte is gedeclareerd, heeft internal standaard toegang.
Zie de pagina Toegankelijkheidsniveaus voor meer informatie over toegangsaanpassingen.
Toegankelijkheid van leden
U kunt leden van een class of struct (inclusief geneste klassen en structs) declareren met een van de zes typen toegang. U kunt struct-leden niet declareren als protected, protected internalof private protected omdat structs geen ondersteuning bieden voor overname.
Normaal gesproken is de toegankelijkheid van een lid niet groter dan de toegankelijkheid van het type dat het bevat. U hebt echter toegang tot een public lid van een internal klasse van buiten de assembly als het lid interfacemethoden implementeert of virtuele methoden overschrijft die zijn gedefinieerd in een openbare basisklasse.
Het type lidveld, eigenschap of gebeurtenis moet ten minste zo toegankelijk zijn als het lid zelf. Op dezelfde manier moeten het retourtype en de parametertypen van elke methode, indexeerfunctie of gemachtigde ten minste zo toegankelijk zijn als het lid zelf. U kunt bijvoorbeeld geen methode public hebben die een M klasse C retourneert, tenzij C dit ook publicis. Op dezelfde manier kunt u geen eigenschap van het type protected hebben A als A deze is gedeclareerd als private.
U moet altijd door de gebruiker gedefinieerde operators declareren als public. Zie Overbelasting van operatoren voor meer informatie.
Als u het toegangsniveau voor een class of struct lid wilt instellen, voegt u het juiste trefwoord toe aan de liddeclaratie, zoals wordt weergegeven in het volgende voorbeeld.
// public class:
public class Tricycle
{
// protected method:
protected void Pedal() { }
// private field:
private int _wheels = 3;
// protected internal property:
protected internal int Wheels => _wheels;
}
Finalizers kunnen geen toegankelijkheidsaanpassingen hebben. Leden van een enum type zijn altijd publicen u kunt geen toegangsaanpassingen toepassen.
C#-taalspecificatie
Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.