Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Všechny typy a členové typů mají úroveň přístupnosti. Úroveň přístupnosti určuje, zda jiný kód ve vašem sestavení nebo v jiných sestaveních je může použít. Sestavení je soubor typu .dll nebo .exe vytvořený zkompilováním jednoho nebo více souborů .cs během jedné kompilace. Pomocí následujících modifikátorů přístupu určete přístupnost typu nebo člena, když ho deklarujete:
- public: Kód v libovolném sestavení má přístup k tomuto typu nebo členu. Úroveň přístupnosti u obsaženého typu určuje úroveň přístupnosti veřejných členů tohoto typu.
-
private: Pouze kód deklarovaný ve stejném
classnebostructmá přístup k tomuto členu. -
protected: K tomuto typu nebo členu má přístup pouze kód ve stejném
classnebo odvozenémclass. - internal: K tomuto typu nebo členu má přístup pouze kód ve stejném sestavení.
- chráněný interní: Tento typ nebo člen může být přístupný pouze kódem ve stejném sestavení nebo odvozenou třídou v jiném sestavení.
- private protected: Ke typu nebo členovi může přistupovat pouze kód ve stejném sestavení a ve stejné třídě nebo odvozené třídě.
Použijte modifikátor typu file pro typy nejvyšší úrovně (nenestované).
file Modifikátor omezuje přístup k kódu ve stejném zdrojovém souboru. Modifikátor nemůžete kombinovat file s žádným modifikátorem přístupu.
record Modifikátor typu způsobí, že kompilátor syntetizuje další členy.
record modifikátor nemá vliv na výchozí přístupnost ani pro record class ani pro record struct.
Souhrnná tabulka
| Umístění volajícího | public |
protected internal |
protected |
internal |
private protected |
private |
|---|---|---|---|---|---|---|
| V rámci třídy | ✔️️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Odvozená třída (stejné sestavení) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| Neodvozená třída (stejné sestavení) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ❌ |
| Odvozená třída (jiné sestavení) | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Ne odvozená třída (jiné sestavení) | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ |
Následující příklady ukazují, jak určit modifikátory přístupu u typu a člena:
public class Bicycle
{
public void Pedal() { }
}
Ne všechny modifikátory přístupu jsou platné pro všechny typy nebo členy ve všech kontextech. V některých případech přístupnost typu omezuje přístupnost jejích členů.
Více deklarací částečné třídy nebo částečného člena musí mít stejnou přístupnost. Pokud jedna deklarace neobsahuje modifikátor přístupu, ostatní deklarace nemůžou deklarovat modifikátor přístupu. Kompilátor vygeneruje chybu, pokud více deklarací pro částečnou třídu nebo metodu deklaruje různé přístupy.
Přístupnost tříd a struktur
Třídy a struktury deklarované přímo v oboru názvů (nejsou vnořené do jiných tříd nebo struktur) mohou mít public nebo internal přístup. Pokud nezadáte modifikátor přístupu, výchozí hodnota je internal. Modifikátor můžete také použít file k omezení přístupu k aktuálnímu zdrojovému souboru.
Můžete deklarovat členy struktury, včetně vnořených tříd a struktur, jako public, internalnebo private. Můžete deklarovat členy třídy, včetně vnořených tříd a struktur, as public, protected internal, protected, , internal, private protectednebo private. Ve výchozím nastavení mají členové tříd a struktur, včetně vnořených tříd a struktur, private přístup.
Odvozené třídy nemohou mít větší přístupnost než jejich základní typy. Nelze deklarovat veřejnou třídu B , která je odvozena z interní třídy A. Pokud je to povoleno, mělo by to vliv na zveřejnění A , protože všechny protected nebo internal členy A jsou přístupné z odvozené třídy.
Můžete povolit konkrétní další sestavení pro přístup k vašim interním typům pomocí nástroje InternalsVisibleToAttribute. Další informace naleznete v tématu Přátelská sestavení.
Další typy
Rozhraní můžete deklarovat přímo v rámci oboru názvů jako public nebo internal. Stejně jako třídy a struktury mají rozhraní výchozí internal přístup. Členy rozhraní jsou public ve výchozím nastavení, protože účelem rozhraní je povolit jiným typům přístup ke třídě nebo struktuře. Deklarace členů rozhraní můžou zahrnovat jakýkoli modifikátor přístupu. Pomocí modifikátorů přístupu u interface členů můžete poskytnout společnou implementaci potřebnou všemi implementátory rozhraní.
Typ delegate deklarovaný přímo v oboru názvů má internal ve výchozím nastavení přístup.
Další informace o modifikátorech přístupu najdete na stránce Úrovně přístupnosti.
Přístupnost členů
Můžete deklarovat členy class nebo struct (včetně vnořených tříd a struktur) pomocí jednoho ze šesti typů přístupu. Členy struktury nelze deklarovat jako protected, protected internalnebo private protected protože struktury nepodporují dědičnost.
Za normálních okolností není přístupnost člena větší než přístupnost typu, který ho obsahuje. Pokud však člen třídy public implementuje metody rozhraní nebo přepisuje virtuální metody definované ve veřejné základní třídě, můžete k tomuto internal členu získat přístup mimo sestavení.
Typ libovolného pole, vlastnosti nebo události člena musí být alespoň tak přístupný jako samotný člen. Podobně návratový typ a typy parametrů jakékoli metody, indexeru nebo delegáta musí být alespoň tak přístupné jako samotný člen. Například nemůžete mít metodu publicM , která vrací třídu C , pokud C není také public. Podobně nemůžete mít protected vlastnost typu A , pokud A je deklarována jako private.
Vždy musíte deklarovat uživatelem definované operátory jako public. Další informace naleznete v tématu Přetížení operátoru.
Pokud chcete nastavit úroveň přístupu pro člena classstruct , přidejte do deklarace člena odpovídající klíčové slovo, jak je znázorněno v následujícím příkladu.
// public class:
public class Tricycle
{
// protected method:
protected void Pedal() { }
// private field:
private int _wheels = 3;
// protected internal property:
protected internal int Wheels => _wheels;
}
Finalizátory nemůžou mít modifikátory přístupnosti. Členové typu enum jsou vždy public, a nelze použít modifikátory přístupu.
specifikace jazyka C#
Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.