Ich denke, dass Fee() und Fi() gleichermaßen zugänglich sind, da die gesamte Klasse bereits intern ist. Übersehe ich etwas? Gibt es einen Grund, in einem solchen Fall öffentlich oder intern für die Methoden zu wählen?öffentliche vs interne Methoden auf einer internen Klasse
Antwort
Die internal class Foo
Deklaration überschreibt die Erreichbarkeit der public void Fee()
Methode und macht sie effektiv intern.
In diesem Fall hat die Verwendung von internal vs. public auf den Methoden den gleichen Effekt. Der einzige Grund, warum ich öffentliche Methoden und interne Methoden in einem Fall wie diesem wählen würde, wäre, den Übergang zu einer öffentlichen Klasse in einer zukünftigen Version zu erleichtern, sollten Sie sich dafür entscheiden.
+1 Meine Gedanken genau! – si618
Gemäß der msdn documentation ist Ihre Foo-Klasse außerhalb Ihrer Baugruppe nicht zugänglich, so dass es keinen Unterschied macht, die Methoden als intern oder öffentlich zu kennzeichnen; Es macht sogar keinen Unterschied durch die Verwendung des Attributs InternalsVisibleTo
Sie haben Recht, sowohl Fee und Fi werden gleichermaßen zugänglich sein.
Von der CSharp Language Specification 3.0, unter 3.5.2:
Die Zugriffsdomäne eines verschachtelten Mitglied M innerhalb eines Programm P in einem Typ T deklariert ist definiert als folgt (unter Hinweis darauf, dass M sich möglicherweise ein Typ) sein kann:
• Wenn das erklärte Zugänglichkeit von M öffentlich ist, die Zugriffsdomäne von M die Zugriffsdomäne von T.
Also, auch wenn Fee als öffentlich erklärt wird, wird es genauso zugänglich sein wie Foo (d. H. intern).
Eigentlich - es gibt einen großen Unterschied, wenn Sie Reflexion verwenden; Insbesondere kann Silverlight sehr verärgert sein, wenn Sie versuchen, über Reflektion auf interne Methoden zuzugreifen, selbst wenn Sie Zugriff gehabt hätten. Ich habe Gelegenheiten gesehen, bei denen ich eine Methode veröffentlichen musste, damit der Code in Silverlight funktioniert, obwohl er auf normalem .NET funktioniert.
Sie könnten das gleiche mit teilweisem Vertrauen in regulären .NET finden.
Das sind die schmutzigen Details, an denen ich immer interessiert bin. Obwohl, wenn jemand Reflektionen verwendet, um auf versteckte Mitglieder in meinen Klassen zuzugreifen, werde ich mir keine Sorgen machen, wenn es schwierig für sie ist. – ScottS
@ScottS - manchmal spiegeln Sie Ihre * eigenen * Typen wider - d. H. Wo Sie normalerweise Zugriff auf die interne Methode hätten, aber plötzlich nicht. –
Die einzige Sache, die hier in der Antwort fehlt, ist, warum würden Sie das tun?
Einige Bibliotheken haben viele Klassen, die nicht für den Benutzer der Bibliothek gedacht sind, die sie berühren müssen, aber sie müssen Schnittstellen erben, die als öffentlich markiert sind. Zum Beispiel habe ich eine Bibliothek mit einer Klasse, die die IComparer-Schnittstelle erbt, aber sie wird nur intern verwendet und ich möchte den öffentlichen Aspekt meiner Bibliothek nicht durcheinander bringen. Wenn ich die implementierte Compare-Funktion als intern markieren, beklagt der Compiler, dass ich die Schnittstelle IComparer nicht ergänze.
Wie kann ich die Schnittstelle erfolgreich implementieren und gleichzeitig verhindern, dass sie im öffentlichen Bereich meiner Bibliothek zugänglich ist? Markieren Sie die Klasse als intern, aber die implementierte Funktion als öffentlich.
ich mit nur internen Methoden gehen würde, wenn eine Klasse intern ist. Falls Sie Ihre Meinung ändern und die Klasse veröffentlichen, können Sie einfach einen Text ersetzen und Sie sind fertig.
Es würde einen Unterschied machen, wenn Ihre interne Klasse eine Schnittstelle implementieren soll. Die Methode, die eine Implementierung einer Schnittstelle ist, müsste öffentlich sein.
- 1. Öffentliche und interne Mitglieder in einer internen Klasse?
- 2. Öffentliche statische Methoden und öffentliche Methoden
- 3. Warum kann meine öffentliche Klasse keine interne Klasse erweitern?
- 4. Instancieren einer Klasse mit einem internen Konstruktor
- 5. Öffentliche Mitglieder vs Konstruktor einer Klasse in C#?
- 6. Vorteil von Set und erhalten Methoden vs öffentliche Variable
- 7. Öffentliche/interne Zugänglichkeit Verwirrung auf einem Web-Service-Wrapper?
- 8. JQuery - Widget öffentliche Methoden
- 9. C# interne VS VBNET Freund
- 10. Ignorieren öffentliche/interne Felder für NHibernate-Proxy
- 11. Unit Testen einer Klasse mit einem internen Konstruktor
- 12. Eine pragmatische Sicht auf private vs öffentliche
- 13. Python öffentliche Methoden in Klassen?
- 14. interne Klasse maskierte durch Objekt
- 15. C# - Wie interne Klasse zuzugreifen Außenmontage
- 16. Zugriff auf "Public" -Methoden von "Private" Methoden in JavaScript-Klasse
- 17. Zugriff auf interne Klasse mit Reflection
- 18. Öffentliche Variable von einer anderen Klasse abrufen
- 19. Öffentliche Methoden nur in IDEA Intellij anzeigen?
- 20. Warum sind nur öffentliche Methoden in einer Schnittstelle zulässig?
- 21. Wie verspotten Sie die interne Methode einer Klasse?
- 22. OO PHP Zugriff auf öffentliche Variable von einer anderen Klasse
- 23. private/öffentliche QT-Signale
- 24. Scala: öffentliche statische Finale in einer Klasse
- 25. Zusätzliche öffentliche Methoden in abgeleiteten Klassen?
- 26. C# - Mitgliedsvariablen an interne Methoden übergeben?
- 27. MSYS vs. MinGW: interne Umgebungsvariablen
- 28. Einzelne öffentliche IP für Service, aber Failover-Verteilung auf zwei interne IPs
- 29. Hat jede Instanz einer einschließenden Klasse eine eigene Kopie einer internen/nicht-statischen Klasse?
- 30. Best Approach, um öffentliche Methoden einer Klasse zu überprüfen, haben Komponententests?
@EricLippert hat heute seine Meinung gebloggt. http://ericlippert.com/2014/09/15/internal-or-public/#more-2353 – ScottS