Megosztás a következőn keresztül:


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 vagy struct a tag elérésére van lehetőség.
  • védett: Csak az azonos class vagy származtatott class 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 structegy 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 publicinternal. 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é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 publicvannak, é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