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)?
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?
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.
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.
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.