Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Minden típus és típustag akadálymentességi szinttel rendelkezik. Az akadálymentességi szint azt határozza meg, hogy a szerelvény más kódjából vagy más szerelvényekből is használhatók-e. 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.
- fájl: Csak ugyanabban a fájlban lévő kód férhet hozzá a típushoz vagy a taghoz.
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 a részleges osztály vagy tag egyik deklarációja nem tartalmaz hozzáférési módosítót, a többi deklaráció nem deklarálhat hozzáférési 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 (más osztályokba vagy szerkezetekbe nem ágyazva) rendelkezhetnek public, internalvagy file hozzáféréssel.
internal az alapértelmezett, ha nincs megadva hozzáférési módosító.
A strukturált tagok, beleértve a beágyazott osztályokat és szerkezeteket, deklarálhatók public, internalvagy private. Az osztálytagok, beleértve a beágyazott osztályokat és a szerkezeteket, lehetnek public, protected internal, protected, internal, private protectedvagy private. Az osztály- és struktúratagok, beleértve a beágyazott osztályokat és szerkezeteket, alapértelmezés szerint rendelkeznek private 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
A névtérben közvetlenül deklarált interfészek lehetnek public vagy internal – az osztályokhoz és a szerkezetekhez hasonlóan – alapértelmezés szerint az illesztők.internal 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. A tagok hozzáférés-módosítóit interface használva biztosíthatja a felület összes implementátora számára szükséges közös megvalósítást.
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
class Egy vagy struct (beleértve a beágyazott osztályokat és szerkezeteket) tagjait a hat hozzáférés-típus bármelyikével deklarálhatja. A strukturált tagok nem deklarálhatók 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. Az osztály egy public tagja internal azonban a szerelvényen kívülről is elérhető lehet, ha a tag interfészmetszeteket implementál, vagy felülbírálja a nyilvános alaposztályban definiált virtuális metódusokat.
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 mindig a következőképpen kell deklarálni public: . 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ók hozzáférési módosítók.
A file hozzáférés-módosító csak legfelső szintű (nem beágyazott) típusú deklarációkon engedélyezett.
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.