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.
Minden típus és típustag akadálymentességi szinttel rendelkezik. Az elérhetőségi szint szabályozza, hogy a kódodban vagy más assembly-kben lévő kódok használhatják-e őket. A szerelvény egy .dll vagy .exe , amelyet egy vagy több .cs fájl egyetlen fordításban való összeállításával hozhat létre. A következő hozzáférési módosítók használatával adhatja meg egy típus vagy tag akadálymentességét a deklaráláskor:
- nyilvános: Bármely szerelvény kódja hozzáférhet ehhez a típushoz vagy taghoz. Az azt tartalmazó típus akadálymentességi szintje szabályozza a típus nyilvános tagjainak akadálymentességi szintjét.
-
privát: Csak ugyanabban
classa deklarált kódban vagystructa tag elérésére van lehetőség. -
védett: Csak az azonos
classvagy származtatottclasskódban lévő kódok férhetnek hozzá ehhez a típushoz vagy taghoz. - belső: Csak az ugyanabban a szerelvényben lévő kód férhet hozzá ehhez a típushoz vagy taghoz.
- belső védelem: Csak ugyanabban a szerelvényben vagy egy másik szerelvény származtatott osztályában lévő kód férhet hozzá ehhez a típushoz vagy taghoz.
- privát védelem: Csak ugyanabban a szerelvényben és ugyanabban az osztályban vagy származtatott osztályban lévő kód férhet hozzá a típushoz vagy taghoz.
Használja a fájlmódosítót a legfelső szintű (nem beágyazott) típusokhoz. A file módosító korlátozza a kódhoz való hozzáférést ugyanabban a forrásfájlban. A file módosító nem kombinálható egyetlen hozzáférési módosítóval sem.
A record típus módosítója miatt a fordító további tagokat szintetizál. A record módosító nem befolyásolja az a vagy record classegy alapértelmezett akadálymentességetrecord struct.
Összegző táblázat
| A hívó helye | public |
protected internal |
protected |
internal |
private protected |
private |
|---|---|---|---|---|---|---|
| Az osztályon belül | ✔️️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Származtatott osztály (ugyanaz a szerelvény) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| Nem származtatott osztály (ugyanaz a szerelvény) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ❌ |
| Származtatott osztály (eltérő szerelvény) | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Nem származtatott osztály (eltérő szerelvény) | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ |
Az alábbi példák bemutatják, hogyan adhat meg hozzáférési módosítókat egy típuson és tagon:
public class Bicycle
{
public void Pedal() { }
}
Nem minden hozzáférési módosító érvényes minden típusra vagy tagra minden környezetben. Bizonyos esetekben a tartalmazó típus akadálymentessége korlátozza a tagok akadálymentességét.
Egy részleges osztály vagy egy részleges tag több deklarációjának azonos akadálymentességgel kell rendelkeznie. Ha egy deklaráció nem tartalmaz hozzáférési módosítót, a többi deklaráció nem deklarálhat hozzáférés-módosítót. A fordító hibát okoz, ha a részleges osztály vagy metódus több deklarációja eltérő hozzáférési képességeket deklarál.
Osztály és szerkezet akadálymentessége
A közvetlenül névtérben deklarált osztályok és szerkezetek (amelyek nincsenek más osztályokba vagy szerkezetekbe ágyazva) rendelkezhetnek public vagy internal hozzáféréssel. Ha nem ad meg hozzáférési módosítót, az alapértelmezett érték a következő internal. A módosítóval file is korlátozhatja az aktuális forrásfájlhoz való hozzáférést.
Deklarálhatja az struct tagokat, beleértve a beágyazott osztályokat és a szerkezeteket is, mint public, internalvagy private. Deklarálhatja az osztálytagokat, beleértve a beágyazott osztályokat és a szerkezeteket, például public, protected internal, protected, internal, private protectedvagy private. Alapértelmezés szerint az osztály- és struktúratagok, köztük a beágyazott osztályok és a szerkezetek is private rendelkeznek hozzáféréssel.
A származtatott osztályok nem rendelkezhetnek nagyobb akadálymentességgel, mint az alaptípusaik. Nem deklarálhat olyan nyilvános osztályt B , amely belső osztályból Aszármazik. Ha engedélyezve van, az a nyilvánossá tételt A eredményezné, mivel az összes protected vagy internal a A tagok a származtatott osztályból érhetők el.
A használatával engedélyezheti, hogy bizonyos más szerelvények hozzáférjenek a belső típusokhoz InternalsVisibleToAttribute. További információ: Barátgyűlések.
Egyéb típusok
Közvetlenül egy névtéren belül deklarálhat interfészeket, mint public vagy internal. Az osztályokhoz és a szerkezetekhez hasonlóan az interfészek is alapértelmezés szerint internal elérhetők. A felülettagok alapértelmezés szerint azért vannak public , mert az interfész célja, hogy más típusok is hozzáférhessenek egy osztályhoz vagy szerkezethez. Az interfésztag-deklarációk tartalmazhatnak hozzáférés-módosító elemet. Használjon hozzáférési módosítókat a tagokon interface , hogy közös implementációt biztosítson az interfész összes implementátora számára.
A delegate névtérben közvetlenül deklarált típus alapértelmezés szerint rendelkezik internal hozzáféréssel.
A hozzáférési módosítókról további információt az Akadálymentességi szintek lapon talál.
A tagok akadálymentessége
A hatféle hozzáférés bármelyikével deklarálhatja egy class vagy struct (beleértve a beágyazott osztályokat és szerkezeteket is) tagjait. Nem deklarálhat strukturált tagokat protected, protected internalvagy private protected mert a szerkezetek nem támogatják az öröklést.
A tagok akadálymentessége általában nem nagyobb, mint az azt tartalmazó típus akadálymentessége. Azonban elérhet egy public tagot egy internal osztályból a szerelvényen kívülről is, ha a tag interfészmetódusokat implementál, vagy felülírja a nyilvánosan meghatározott alaposztály virtuális metódusait.
Bármely tagmező, tulajdonság vagy esemény típusának legalább olyan hozzáférhetőnek kell lennie, mint maga a tag. Hasonlóképpen, bármely metódus, indexelő vagy delegált visszatérési típusának és paramétertípusának legalább olyan elérhetőnek kell lennie, mint maga a tag. Például nem rendelkezhet olyan metódussal publicM , amely osztályt C ad vissza, kivéve, ha C az is public. Hasonlóképpen, nem rendelkezhet típustulajdonságsal protectedA , ha A deklaráltként privatevan deklarálva.
A felhasználó által definiált operátorokat publicmindig a következőképpen kell deklarálni: . További információ: Operátorok túlterhelése.
Egy vagy class több tag hozzáférési szintjének struct beállításához adja hozzá a megfelelő kulcsszót a tagdeklarációhoz az alábbi példában látható módon.
// public class:
public class Tricycle
{
// protected method:
protected void Pedal() { }
// private field:
private int _wheels = 3;
// protected internal property:
protected internal int Wheels => _wheels;
}
A véglegesítők nem rendelkezhetnek akadálymentességi módosítókkal. Egy enum típus tagjai mindig publicvannak, és nem alkalmazhat hozzáférési módosítókat.
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.