Modifikatoren für internen und privaten Zugriff

Antworten:

516

intern ist für den Assemblybereich vorgesehen (dh nur über Code in derselben EXE- oder DLL-Datei zugänglich).

privat ist für den Klassenbereich (dh nur über Code in derselben Klasse zugänglich).

Forscher
quelle
6
Ich habe eine kurze Frage. Wenn ich eine Klasse in einem Namespace innerhalb einer Assembly als privat deklariere und die Klasse nicht intern ist, kann ich in beiden Fällen auf diese Klasse innerhalb der Assembly zugreifen. Was ist dann der Unterschied zwischen einer privaten Klasse und einer internen Klasse? oder werden private und interne Modifikatoren in Bezug auf Klassen verwendet, wenn Klassen innerhalb von Klassen verschachtelt werden?
Mayotic
2
Ich habe das spezifische Projekt / die Baugruppe als Referenz für ein anderes Projekt hinzugefügt und sowohl private als auch interne verhindern, dass ich auf diese bestimmte Klasse innerhalb des Namespace zugreifen kann. Also ist der Unterschied zwischen privaten und internen Klassen? danke
mayotic
9
Sie können eine Klasse der obersten Ebene nicht als privat deklarieren. Der Compiler wird Sie aufhalten.
TheGateKeeper
6
@NetSkay: Wenn Sie eine private Klasse innerhalb einer öffentlichen Klasse deklarieren, können andere Klassen in Ihrer Assembly nicht auf diese Klasse zugreifen. Wenn Sie diese Klasse jedoch als intern deklarieren, ist sie in der Assembly zugänglich. Beide sind jedoch außerhalb der Baugruppe nicht zugänglich.
Yogesh Jindal
2
Wenn Sie aus einem VB.NET-Hintergrund stammen, entspricht das Schlüsselwort "intern" von C # dem Schlüsselwort "Freund" von VB.NET.
Brain2000
207

Hier finden Sie eine Erklärung. Sie können diesen Link für weitere Details überprüfen - http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

Privat: - Auf private Mitglieder kann nur innerhalb des eigenen Typs (eigene Klasse) zugegriffen werden.

Intern: - Auf interne Mitglieder kann nur innerhalb der Assembly durch Vererbung (deren abgeleiteter Typ) oder nach Instanz der Klasse zugegriffen werden.

Geben Sie hier die Bildbeschreibung ein

Referenz :

dotnetbull - Was ist der Zugriffsmodifikator in c #?

Vivek
quelle
17
Interessant, das Protected Internalbietet einen breiteren Zugang als Protected.
Dan Bechard
9
@ Dan, stimme voll und ganz zu. Es könnte hilfreich sein , zu lesen und zu denken protected internalwie protected OR internal.
Schachofnerd
7
Was heißt With Typedas
James Wierzba
@ Dan ja, ich nahm an, dass es nur als Wahrheitstabelle und ANDdiese Matrix für wahr | falsch | falsch | falsch für fungieren würde protected internal. nicht intuitiv. stattdessen ist es wahr | wahr | wahr | falsch, als ob OR'd.
Ferr
1
Übrigens hat C # 7.2 gerade einen "geschützten UND internen" Modifikator hinzugefügt, obwohl die tatsächlich ausgewählten Schlüsselwörter private protectednicht sehr intuitiv sind. Für Details: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Joe Sewell
70

internalMitglieder sind für den gesamten Code in der Assembly sichtbar, in der sie deklariert sind.
(Und für andere Assemblys, auf die mit dem [InternalsVisibleTo]Attribut verwiesen wird. )

privateMitglieder sind nur für die deklarierende Klasse sichtbar. (einschließlich verschachtelter Klassen)

Eine äußere (nicht verschachtelte) Klasse kann nicht deklariert werden private, da es keinen Bereich gibt, für den sie privat gemacht werden kann.

Um die Frage zu beantworten, die Sie vergessen haben zu stellen, sind protectedMitglieder wie privateMitglieder, aber auch in allen Klassen sichtbar, die den deklarierenden Typ erben. (Aber nur bei einem Ausdruck mindestens des Typs der aktuellen Klasse)

SLaks
quelle
8

privat - Kapselungen in Klasse / Umfang / Struktur '.

intern - Kapselung in Baugruppen.

Yaniv Lugassy
quelle
6

Private Mitglieder sind nur innerhalb des Hauptteils der Klasse oder der Struktur zugänglich, in der sie deklariert sind.

Auf interne Typen oder Mitglieder kann nur innerhalb von Dateien in derselben Assembly zugegriffen werden

Jesper Fyhr Knudsen
quelle
Was ist der Unterschied bei der Verwendung? Ich
verstehe
4
Privat ist nur innerhalb der Klasse zugänglich, Intern ist innerhalb der Assembly zugänglich (Projekt in VS, dh DLL / EXE-Datei).
Jesper Fyhr Knudsen
3

Intern ermöglicht es Ihnen, beispielsweise auf eine statische Datenzugriffsklasse (aus Gründen der Thread-Sicherheit) zwischen mehreren Geschäftslogikklassen zu verweisen, ohne diese zu abonnieren, um diese Klasse / diesen Trip in Verbindungspools übereinander zu erben und letztendlich zu vermeiden, dass eine DAL-Klasse zugelassen wird den Zugang auf öffentlicher Ebene zu fördern. Dies hat unzählige Hintergründe in Bezug auf Design und Best Practices.

Entity Framework nutzt diese Art des Zugriffs gut

Nathan Teague
quelle
0

Interne Mitglieder sind innerhalb der Assembly zugänglich (nur im selben Projekt zugänglich).

Private Mitglieder sind innerhalb derselben Klasse zugänglich

Beispiel für Anfänger

Es gibt 2 Projekte in einer Lösung (Projekt1, Projekt2) und Projekt1 hat einen Verweis auf Projekt2.

  • Auf die in Project2 geschriebene öffentliche Methode kann in Project2 und Project1 zugegriffen werden
  • Auf die in Project2 geschriebene interne Methode kann nur in Project2 zugegriffen werden, nicht jedoch in Project1
  • Auf die in Klasse 1 von Project2 geschriebene private Methode kann nur dieselbe Klasse zugreifen. Es ist weder in anderen Klassen von Projekt 2 noch in Projekt 1 zugänglich.
Salik
quelle