Private Klasse mit Public-Methode?
Hier ist ein Stück code:
private class myClass
{
public static void Main()
{
}
}
'or'
private class myClass
{
public void method()
{
}
}
Ich weiß, das erste wird nicht funktionieren. Und zweiter wird.
Aber warum das erste nicht funktioniert? Gibt es irgendeinen bestimmten Grund dafür?
Eigentlich auf der Suche nach einer Lösung in dieser Perspektive, das ist, warum es gemacht Fett. Sorry
- Schwer zu erraten, was Sie meinen, weder gültig ist. Nur eine verschachtelte Klasse kann privat sein. Eine nicht-geschachtelte Klasse kann nicht privat sein, weil dann kann es nie verwendet werden, durch einen code.
- was genau meinst du mit "funktioniert nicht"?
- Warum es nicht von jedem eins? Eigenen Klasse zugegriffen werden kann, mit in-namespace instanziiert werden können und öffentliche Elemente kann zugegriffen werden
- Es wird nicht kompiliert
- Nein. Der compiler ist ziemlich deutlich: Elemente definiert, die in einem namespace nicht explizit deklariert werden, wie private, protected oder protected internal
- Danke, du hast Recht. Ich missverstanden paar Dinge. Thaks für Lager mit mir. Keiner von Ihnen funktionieren wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre es sinnvoll in diesem Szenario; Sie eine öffentliche Klasse
SomeClass
ist, innerhalb dessen Sie möchten Kapseln einige Funktionen, die nur relevant istSomeClass
. Man könnte dies durch die Deklaration einer eigenen Klasse (SomePrivateClass
in meinem Beispiel) innerhalbSomeClass
, wie unten gezeigt.Dies gilt unabhängig davon, ob
SomePrivateClass
iststatic
oder enthältpublic static
Methoden.Ich würde das als eine geschachtelte Klasse, und es wird erforscht, in anderen StackOverflow-thread.
Only SomeClass has access to [...] its public methods.
- nicht ganz richtig. Wenn Sie einen Verweis geben, der geschachtelten eigenen Klasse an jemanden außerhalb der äußeren Klasse haben Zugriff auf die öffentlichen Methoden (siehe meine Antwort ein Beispiel).DoSomething
?SomeClass
hat Zugriff auf eine Instanz vonSomePrivateClass
wird in der Lage sein zu rufenDoSomething
auf diese Instanz.Richard Ev gab einen Anwendungsfall der Zugang in einem verschachtelten Klassen. Ein anderer Anwendungsfall für geschachtelte Klassen ist private Durchführung einer öffentlichen Schnittstelle:
Dieser erlaubt auch eine private (oder protected oder internal) Implementierung einer public interface oder eine Basisklasse. Die Verbraucher müssen nicht wissen, noch kümmern die konkrete Umsetzung. Dies kann auch durchgeführt werden, ohne verschachtelte Klassen durch die
MySpecialEnumerator
Klasse intern sein, wie Sie nicht haben, nicht verschachtelte private Klassen.BCL benutzt, die nicht-öffentliche Implementierungen ausgiebig. Zum Beispiel zurückgegebenen Objekte von LINQ-Operatoren sind nicht-öffentliche Klassen, implementieren
IEnumerable<T>
.Dieser code ist syntaktisch korrekt. Aber die große Frage ist: ist es sinnvoll oder zumindest brauchbar in dem Kontext, in dem Sie es verwenden möchten? Wahrscheinlich nicht, da die
Main
Methode muss in einempublic
Klasse.Main()
Methode ist, wo die Ausführung der Anwendung beginnen, so die Begründung können Sie nicht kompilieren der ersten Klasse (mitpublic static void Main()
) ist, weil Sie bereitsMain
Methode irgendwo anders in der Anwendung. Der compiler weiß nicht, wo zu beginnen, die Ausführung Ihrer Anwendung.Ihre Anwendung muss nur eine
Main
- Methode zum kompilieren mit Standard-Verhalten, sonst müssen Sie /main option, wenn Sie Sie kompilieren.