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 .dll nebo .exe vytvořené kompilací jednoho nebo více .cs souborů v jedné kompilaci. 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 obsahujícího typu řídí úroveň přístupnosti veřejných členů typu.
-
private: Pouze kód deklarovaný ve stejném
classnebostructmá přístup k tomuto členu. -
protected: K tomuto typu nebo členu mají přístup pouze kód ve stejném
classnebo odvozenémclasskódu. - internal: K tomuto typu nebo členu má přístup pouze kód ve stejném sestavení.
- chráněná vnitřní: Přístup k tomuto typu nebo členu mají přístup pouze kód ve stejném sestavení nebo v odvozené třídě v jiném sestavení.
- privátní ochrana: Přístup k typu nebo členu mají přístup 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 pro ani record class 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í) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| Ne odvozená 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 internal implementuje metody rozhraní nebo přepisuje virtuální metody definované ve veřejné základní třídě, můžete k tomuto public č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#.