Jakie są domyślne modyfikatory dostępu w C#?
Jaki jest domyślny modyfikator dostępu dla klas, metod, członków, konstruktorów, delegatów i interfejsów?
7 answers
Domyślnym dostępem do wszystkiego w C# jest"najbardziej ograniczony dostęp, jaki możesz zadeklarować dla tego członka".
Więc na przykład:
namespace MyCompany
{
class Outer
{
void Foo() {}
class Inner {}
}
}
Jest równoważne
namespace MyCompany
{
internal class Outer
{
private void Foo() {}
private class Inner {}
}
}
Wyjątek od tego polega na tym, że jedna część właściwości (zazwyczaj setter) jest bardziej ograniczona niż deklarowana dostępność samej właściwości:
public string Name
{
get { ... }
private set { ... } // This isn't the default, have to do it explicitly
}
Oto co ma do powiedzenia Specyfikacja C# 3.0 (sekcja 3.5.1):
W zależności od kontekst, w którym a deklaracja członkowska odbywa się tylko niektóre rodzaje deklarowanych dostępność jest dozwolona. Ponadto, gdy deklaracja członkowska nie zawiera modyfikatorów dostępu, kontekst, w którym deklaracja odbywa się określa domyślną deklarowana dostępność.
- Przestrzenie nazw domyślnie mają zadeklarowaną dostępność publiczną. Brak dostępu modyfikatory są dozwolone w przestrzeni nazw deklaracje.
- typy zadeklarowane w jednostkach kompilacji lub przestrzenie nazw mogą mieć publiczne lub wewnętrzna deklarowana dostępność i default to internal declared dostępność.
- Członkowie klasy mogą mieć dowolny z pięciu rodzajów deklarowanej dostępności i domyślnie deklarowane jako prywatne dostępność. (Zauważ, że typ zadeklarowany jako członek klasy może mieć jeden z pięciu rodzajów zadeklarowanych dostępności, natomiast typ deklarowany jako członek przestrzeni nazw może mieć tylko publiczne lub wewnętrzne zadeklarowane dostępność.)
- członkowie struktury mogą mieć zadeklarowane publiczne, wewnętrzne lub prywatne dostępność i domyślnie prywatny deklarowana dostępność, ponieważ struktury są niejawnie zapieczętowane. Członkowie struktury wprowadzony w strukturze (czyli nie dziedziczona przez tę strukturę) nie może mieć chronione lub chronione wewnętrzne deklarowana dostępność. (Zauważ, że a Typ zadeklarowany jako członek struktury może mieć publiczny, wewnętrzny lub prywatny deklarowana dostępność, natomiast typ zgłoszony jako członek przestrzeń nazw może mieć tylko publiczne lub wewnętrzne deklarowana dostępność.)
- Członkowie interfejsu domyślnie mają publicznie zadeklarowaną dostępność. Nie. modyfikatory dostępu są dozwolone na deklaracje członków interfejsu.
- Członkowie Enumeracji domyślnie mają publicznie zadeklarowaną dostępność. Nie. modyfikatory dostępu są dozwolone na wyliczenie deklaracji członkowskich.
(zauważ, że zagnieżdżone typy wchodzą w skład części" class members "lub" struct members " - i dlatego domyślna widoczność prywatna.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-25 13:50:20
top level class: internal
method: private
members (unless an interface or enum): private (including nested classes)
members (of interface or enum): public
constructor: private (note that if no constructor is explicitly defined, a public default constructor will be automatically defined)
delegate: internal
interface: internal
explicitly implemented interface member: public!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-03 17:19:25
Krótka odpowiedź: minimalny możliwy dostęp (por. odpowiedź Jona Skeeta).
Długa odpowiedź:
Nonested types, enumeration and delegate accessibilities (może mieć tylko dostęp wewnętrzny lub publiczny )
| Default | Permitted declared accessibilities ------------------------------------------------------------------ namespace | public | none (always implicitly public) enum | public | none (always implicitly public) interface | internal | public, internal class | internal | public, internal struct | internal | public, internal delegate | internal | public, internal
zagnieżdżone type and member accessiblities
| Default | Permitted declared accessibilities ------------------------------------------------------------------ namespace | public | none (always implicitly public) enum | public | none (always implicitly public) interface | public | none class | private | All¹ struct | private | public, internal, private² delegate | private | All¹ constructor | private | All¹ interface member | public | none (always implicitly public) method | private | All¹ field | private | All¹ user-defined operator| none | public (must be declared public)
1 All = = = public, protected, internal, private, protected internal
2 struktury nie mogą dziedziczyć ze struktur lub klas (chociaż mogą, interfejsy), dlatego protected nie jest poprawnym modyfikatorem
Dostępność zagnieżdżonego typu zależy od jego domeny dostępności, która jest określana zarówno przez deklarowaną dostępność elementu członkowskiego, jak i domenę dostępności typu bezpośrednio zawierającego. Domena dostępności zagnieżdżonego typu nie może jednak przekraczać domeny typu zawierającego.
Uwaga: CIL ma również przepis na chronione i wewnętrzne (w przeciwieństwie do istniejącego chronionego "lub" wewnętrznego), ale według mojej wiedzy nie jest on obecnie dostępny do użycia w C#.
Zobacz:
Http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx
http://msdn.microsoft.com/en-us/library/ms173121.aspx
http://msdn.microsoft.com/en-us/library/cx03xt0t.aspx
(Man I love Microsoft Uri...)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 17:10:29
[[0]} spójrz na modyfikatory dostępu (C# Programming Guide)
Class and Struct Accessibility
Wewnętrzne jest domyślne, jeśli brak dostępu modyfikator jest określony.Class and Struct Member Accessibility
Członkowie klasy (w tym zagnieżdżone klasy i struktury) Można zadeklarować dowolną z pięciu rodzaje dostępu. Członkowie Struct nie mogą być zadeklarowane jako chronione, ponieważ struktury nie wspierają dziedziczenia.The dostępność członka może nigdy nie bądź większy niż dostępność jego typu
Operatory zdefiniowane przez Użytkownika muszą być zawsze ogłoszone jako publiczne. Więcej informacje, patrz operator (C# Reference).
Destruktory nie mogą mieć dostępności modyfikatory.
Inne Typy
Interfejsy deklarowane bezpośrednio z przestrzenią nazw mogą być deklarowane jako publiczne lub wewnętrzne i jak klasy i struktury, interfejsy default to internal dostęp.Członkowie Enumeracji są zawsze publiczni, i żadne modyfikatory dostępu nie mogą być zastosowany.
Domyślnie delegaci mają wewnętrzne dostęp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-26 06:37:44
Chciałbym dodać jakiś link do dokumentacji. Sprawdź więcej szczegółów tutaj.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-01 11:17:45
Wewnętrzny jest domyślnym modyfikatorem
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-14 11:12:02
Poziom przestrzeni nazw: internal
Type level: private
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-26 06:31:36