Standardsichtbarkeit für C # -Klassen und -Mitglieder (Felder, Methoden usw.)?


163

Ich versuche, eine Referenz für die Standardsichtbarkeit verschiedener Aspekte von C # zu finden. Klassentypen, Felder, Methoden, Aufzählungen usw.

Kann jemand eine Liste dieser zusammen mit ihrer Standardsichtbarkeit bereitstellen (dh keinen Modifikator mit Präfix)?



8
Ich würde es nicht als Duplikat betrachten ... diese Frage ist spezifisch (Was ist die Standardeinstellung für DIESES?), Diese ist weit
gefasst

Antworten:


265

Alle Informationen, die Sie suchen, finden Sie hier und hier (danke Reed Copsey ):

Vom ersten Link:

Klassen und Strukturen , die direkt in einem Namespace deklariert sind (dh nicht in anderen Klassen oder Strukturen verschachtelt sind), können entweder öffentlich oder intern sein. Intern ist die Standardeinstellung, wenn kein Zugriffsmodifikator angegeben ist .

...

Die Zugriffsebene für Klassenmitglieder und Strukturmitglieder , einschließlich verschachtelter Klassen und Strukturen, ist standardmäßig privat .

...

Schnittstellen standardmäßig für den internen Zugriff.

...

Delegaten verhalten sich wie Klassen und Strukturen. Standardmäßig haben sie internen Zugriff, wenn sie direkt in einem Namespace deklariert werden, und privaten Zugriff, wenn sie verschachtelt sind .


Vom zweiten Link:

Top-Level-Typen , die nicht in anderen Typen verschachtelt sind, können nur intern oder öffentlich zugänglich sein. Die Standardzugriffsmöglichkeit für diese Typen ist intern .

Und für verschachtelte Typen:

Mitglieder der Standard-Mitgliederzugänglichkeit
---------- ----------------------------
enum public
Klasse privat
Schnittstelle öffentlich
struct private

6
Eine schöne Zusammenstellung aus Reeds Informationen, aber Sie haben vergessen anzugeben, dass solche Zugriffsmodifikatoren auch für Methoden gelten.
Joel

4
@ Joel Was meinst du? Er gibt eindeutig "Mitglieder" an. Mitglieder sind Daten und Verhalten und schließen daher Methoden ein.
Rism

Falls sich vb.net-Entwickler dies ansehen, ist vb anders. Der Standardbereich für vb-Klassenmitglieder ist Public. EnumMitglieder sind auch Public. Es ist wahrscheinlich weniger verwirrend, in Ihrem Fall nur den expliziten Bereich zu verwenden, da die Chancen hoch sind, dass er irgendwann von c # -Entwicklern übersetzt oder gelesen wird. Die Codegenerierung in vb.net erledigt dies leider nicht für Sie.
Toddmo

Ich werde hinzufügen, dass eine verschachtelte Schnittstelle innerhalb einer Klasse standardmäßig privat und nicht intern ist.
Frank Bryce

13

Von MSDN:

Top-Level - Typen , die nicht in anderen Typen verschachtelt, können nur haben internaloder publicZugänglichkeit. Die Standardzugriffsmöglichkeit für diese Typen ist internal.


Verschachtelte Typen , die Mitglieder anderer Typen sind, können die in der folgenden Tabelle angegebenen Zugänglichkeiten deklariert haben.

Standardmodifikatoren für die Barrierefreiheit verschachtelter Mitglieder und zulässige Barrierefreiheit

Quelle: Barrierefreiheitsstufen (C # -Referenz) (6. Dezember 2017)


9

Standardmäßig ist der Zugriffsmodifikator für eine Klasse internal. Das heißt, auf eine Klasse kann innerhalb derselben Assembly zugegriffen werden. Wenn wir jedoch möchten, dass auf die Klasse von anderen Assemblys aus zugegriffen wird, muss sie veröffentlicht werden.


19
Diese Informationen waren bereits in den anderen Antworten vorhanden. Sie sollten eine Frage, insbesondere eine alte wie diese, nur beantworten, wenn Sie zusätzliche Informationen zur Verfügung haben oder der Meinung sind, dass die anderen Antworten falsch sind. Willkommen bei Stack Overflow.
Gorpik

Eine Klasse muss nicht unbedingt öffentlich gemacht werden, um anderen Versammlungen zugänglich gemacht zu werden. Man könnte die InternalsVisibleToAttribute-Klasse verwenden[assembly:InternalsVisibleTo("Friend1b")]
Adam

0

Standardmäßig ist private. Klassen sind es, wenn sie nicht verschachtelt sind internal.


1
Sind Enums nicht standardmäßig öffentlich?
Ryan Peters

4
@ Jay: Es sei denn, sie sind verschachtelt. @ Ryan: Nein, nicht verschachtelte Aufzählungen sind standardmäßig intern.
Jon Skeet

2
@ Ryan: Enum-Mitglieder sind standardmäßig öffentlich, aber die Enum selbst ist intern.
Reed Copsey

@ReedCopsey Aber das Buch, aus dem ich lerne, sagt das deutlich enum members are private by default, so to use them outside the enum we should declare them as public. Können Sie bitte erklären, warum das Buch Ihren Aussagen widerspricht? Vielen Dank.

Was auch immer book @ user5794376 (eindeutig ein gelöschter Account) liest, sollte alle 1-Stern-Bewertungen erhalten, wenn das, was sie im Buch sagen, wahr ist. Wenn Sie sich nur Microsoft Docs ansehen, müssen Sie wissen, dass Enum-Mitglieder standardmäßig öffentlich sind. Daher ist es üblich, dass Enums nur nicht explizit angegeben werden.
Rodney S. Foley
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.