UPDATE: Diese Frage war das Thema meines Blogs im September 2014 . Danke für die tolle Frage!
Selbst innerhalb des Compilerteams selbst gibt es erhebliche Debatten zu dieser Frage.
Zunächst einmal ist es ratsam, die Regeln zu verstehen. Ein öffentliches Mitglied einer Klasse oder Struktur ist ein Mitglied, auf das jeder zugreifen kann, der auf den enthaltenen Typ zugreifen kann . Ein öffentliches Mitglied einer internen Klasse ist also effektiv intern.
Sollten nun bei einer internen Klasse die Mitglieder, auf die Sie in der Versammlung zugreifen möchten, als öffentlich oder intern gekennzeichnet sein?
Meine Meinung ist: Markiere solche Mitglieder als öffentlich.
Ich benutze "public", um zu bedeuten, dass "dieses Mitglied kein Implementierungsdetail ist". Ein geschütztes Mitglied ist ein Implementierungsdetail. Es gibt etwas, das benötigt wird, damit eine abgeleitete Klasse funktioniert. Ein internes Mitglied ist ein Implementierungsdetail. Für etwas anderes in dieser Baugruppe ist das Mitglied erforderlich, damit es ordnungsgemäß funktioniert. Ein öffentliches Mitglied sagt: "Dieses Mitglied repräsentiert die wichtigsten dokumentierten Funktionen, die von diesem Objekt bereitgestellt werden."
Grundsätzlich lautet meine Einstellung: Angenommen, ich habe beschlossen, diese interne Klasse zu einer öffentlichen Klasse zu machen. Dazu möchte ich genau eines ändern : die Zugänglichkeit der Klasse. Wenn das Verwandeln einer internen Klasse in eine öffentliche Klasse bedeutet, dass ich auch ein internes Mitglied in ein öffentliches Mitglied verwandeln muss, dann war dieses Mitglied Teil der öffentlichen Fläche der Klasse und sollte an erster Stelle öffentlich sein.
Andere Leute sind anderer Meinung. Es gibt ein Kontingent, das besagt, dass sie in der Lage sein möchten, einen Blick auf die Erklärung eines Mitglieds zu werfen und sofort zu wissen, ob sie nur aus dem internen Code aufgerufen wird.
Leider klappt das nicht immer gut; Bei einer internen Klasse, die eine interne Schnittstelle implementiert, müssen die implementierenden Mitglieder weiterhin als öffentlich markiert sein, da sie Teil der öffentlichen Oberfläche der Klasse sind .