Warum C # Methoden / Mitglieder erlaubt, öffentlich zu sein, wenn die Klasse intern ist

8

Ich habe eine Klasse, die ich als intern markiert habe und Felder und Methoden als öffentlich markiert habe. Es kompiliert ohne Fehler oder Warnungen. Gibt es eine besondere Notwendigkeit, Methoden wie public und class als intern zu haben (außer wenn sie von Interfaces oder Klassen implementiert werden)?

    
Ravisha 15.02.2010, 08:32
quelle

4 Antworten

8

Es hat keine negativen Auswirkungen und bedeutet auch, dass Sie die Barrierefreiheit Ihrer Mitglieder nicht ändern müssen, wenn Sie sich jemals dafür entscheiden, den Typ öffentlich zu machen.

Grundsätzlich für ein Mitglied:

  • public bedeutet, dass das Mitglied für jeden sichtbar ist, der den Type sehen kann.

  • intern bedeutet, dass das Mitglied nur in der aktuellen Assembly sichtbar ist, selbst wenn der Typ öffentlich sichtbar ist.

Also würde Ihre Wahl darauf basieren, welche davon am geeignetsten ist. Im Allgemeinen ist es am geeignetsten, die Mitglieder öffentlich zu machen (d. H. Sichtbar für jeden, der den Typ sehen kann, d. H. Einen Teil der öffentlichen API des Typs). Sie würden Mitglieder aus demselben Grund intern machen, aus dem Sie Mitglieder in einer öffentlichen Klasse intern machen - typischerweise Helfer-Mitglieder, die nur für "Freund" -Klassen in derselben Assembly sichtbar sein sollten und nicht Teil der öffentlichen API sind.

>

Darüber hinaus kann ein interner Typ von einem öffentlichen Type abgeleitet werden, sodass er öffentliche Member erben und überschreiben kann. Wäre es sinnvoll, übergeordnete öffentliche Mitglieder zuzulassen, aber keine neuen öffentlichen Mitglieder?

    
Joe 15.02.2010, 08:53
quelle
5

Eine Klasse, die als intern mit öffentlichen Methoden markiert ist, würde es anderen Klassen in derselben Assembly ermöglichen, auf diese Methoden zu verweisen.

intern (C # -Referenz)

  

Eine allgemeine Verwendung des internen Zugriffs ist in   komponentenbasierte Entwicklung, weil es   aktiviert eine Gruppe von Komponenten für   kooperieren auf private Art und Weise ohne   dem Rest der Welt ausgesetzt sein   Anwendungscode. Beispiel: a   Framework zum Erstellen von grafischen Benutzer   Schnittstellen könnten Control und   Formularklassen, die mit kooperieren   Mitglieder mit internem Zugang. Schon seit   Diese Mitglieder sind interne, sie sind   nicht dem Code ausgesetzt, der den   Rahmen.

     

Es ist ein Fehler beim Referenzieren eines Typs oder   ein Mitglied mit internem Zugriff außerhalb   die Versammlung, in der es war   definiert.

Bearbeiten

Von Umfang der internen Methode in C #?

>
  

Vielleicht möchten Sie eine Methode für eine Öffentlichkeit   Klasse, die von anderen aufgerufen werden kann   Klassen in der Versammlung, aber nicht durch   Kunden der Versammlung.

    
Adriaan Stander 15.02.2010 08:36
quelle
1

Es gibt keine Warnung, da es keine negativen Auswirkungen hat. Die Mitglieder sind sowieso nicht von anderen Versammlungen zugänglich, egal ob Sie sie als öffentlich oder intern markieren.

    
jrcalzada 15.02.2010 08:38
quelle
0

Betrachten Sie diesen Fall:

Sie haben eine FooFactory, die Objekte erstellt, die IFoo implementieren. Ihre IFoo-Implementierungen sind möglicherweise intern, da Sie sie nicht anderen Assemblys zugänglich machen möchten, die nur IFoo verwenden. Die Mitglieder der IFoo-Implementierung müssen öffentlich sein, damit sie in den anderen Assemblys verwendet werden können.

Da ich nun alle Ihre Fragen gelesen habe, glaube ich nicht, dass Methoden für interne Klassen öffentlich sein können, es sei denn, es gibt einen Weg, auf diese Klassen von anderen Assemblies über Schnittstellen oder Basis zuzugreifen Klassen.

    
Andrew Kennan 15.02.2010 08:44
quelle

Tags und Links