Hozzáférési módosítók (C# programozási útmutató)
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
class
a deklarált kódban vagystruct
a tag elérésére van lehetőség. - védett: Csak az azonos
class
vagy származtatottclass
kó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 struct
egy alapértelmezett akadálymentességetrecord class
.
Összegző táblázat
A hívó helye | public |
protected internal |
protected |
internal |
private protected |
private |
file |
---|---|---|---|---|---|---|---|
A fájlon belül | ✔️️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
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.
Ha egy részleges osztály vagy részleges metódus egyik deklarációja nem deklarálja az akadálymentességét, akkor a másik deklaráció akadálymentessége is elérhető. 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 névtérben közvetlenül deklarált osztályok és szerkezetek (más osztályokba vagy szerkezetekbe nem ágyazva) lehetnek vagy public
internal
. 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
, internal
vagy private
. Az osztálytagok, beleértve a beágyazott osztályokat és a szerkezeteket, lehetnek public
, protected internal
, protected
, internal
, private protected
vagy 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 A
szá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 internal
vagy 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 public
M
, amely osztályt C
ad vissza, kivéve, ha C
az is public
. Hasonlóképpen, nem rendelkezhet típustulajdonságsal protected
A
, ha A
deklaráltként private
van deklarálva.
A felhasználó által definiált operátorokat mindig a következőként kell deklarálni: public
és static
. További információ: Operátorok túlterhelése.
Egy vagy struct
több tag hozzáférési szintjének class
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
{
get { return _wheels; }
}
}
A véglegesítők nem rendelkezhetnek akadálymentességi módosítókkal. Egy enum
típus tagjai mindig public
vannak, és nem alkalmazhatók hozzáférési módosítók.
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.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: