N_Gnom Geschrieben 12. Oktober 2017 Teilen Geschrieben 12. Oktober 2017 (bearbeitet) Hi, ich beginne gerade mit C# und hätte eine Frage. Nehmen wir folgenden weltberühmten code using System; namespace HelloWorld { class Hello { static void Main() { Console.WriteLine("Hello World!"); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } } Warum wird dort zu Beginn der namespace mit dem Namen des Programms festgelegt/erstellt und die Klasse Hello(mir ist bewusst dass da auch xyz stehen könnte)? Dient dies vorsorglich dazu da man seinen code ja auch jederzeit als lib nutzen könnte, oder zu welchem Zweck macht man dies an dieser Stelle? Bearbeitet 12. Oktober 2017 von N_Gnom Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rienne Geschrieben 13. Oktober 2017 Teilen Geschrieben 13. Oktober 2017 (bearbeitet) Das Konzept der Namespaces Das Openbook kann dir sicher auch noch bei weiteren Fragen zu C# helfen. Bearbeitet 13. Oktober 2017 von Rienne Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Whiz-zarD Geschrieben 13. Oktober 2017 Teilen Geschrieben 13. Oktober 2017 Namespaces dienen dazu, Klassen eindeutig zu identifizieren. Angenommen du entwirfst die Klasse Auto und lädst eine Drittbibliothek, die ebenfalls eine Klasse Auto besitzt. Welche Klasse soll dann genommen werden? Deine Klasse Hello, kannst du auch im vollqualifizierten Namen schreiben: HelloWorld.Hello Beispiel: Hello hello1 = new Hello(); HelloWorld.Hello hello2 = new HelloWorld.Hello(); Beide Zeilen machen exakt das selbe. Die zweite Zeile benutzt aber den vollqualifizierten Namen der Klasse. Du gibst ja auch was aus der Konsole aus. Die Steuerung der Konsole machst du ja über die Klasse Console. Die Klasse befindet sich im Namespace System. Darum findest du in der ersten Zeile auch using System; Mit der using-Direktive weiß der Compiler, wo er nach den Klassen suchen soll, wenn du nicht den vollqualifizierten Namen der Klasse angibst. Genauso gut könntest du auch diese Zeile löschen und anstatt Console.WriteLine() schreibst du System.Console.WriteLine(). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
N_Gnom Geschrieben 13. Oktober 2017 Autor Teilen Geschrieben 13. Oktober 2017 (bearbeitet) Danke für die Antworten. Ich weiß was namespaces und klassen sind, meine Frage war warum dies hier verwendet wird namespace HelloWorld { class Hello Wenn ich eine standalone .exe compiliere, brauche ich doch theoretisch weder den namespace Helloworld, noch die Klasse Hello. Ich weiß dass das so standard ist, aber wozu an dieser Stelle? Wenn ich den code nicht als alleinstehende .exe haben will sondern die methoden in anderen codes wiederverwenden will, dann ist das schlüssig.Jedoch nicht bei einer .exe Im obigen Beispiel exisitiert ja kein Zugriff auf Helloworld und Hello. Klar könnte ich es einfach so hinnehmen dass es so ist, aber ich würde das einfach genau wissen wollen. Bearbeitet 13. Oktober 2017 von N_Gnom Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rienne Geschrieben 13. Oktober 2017 Teilen Geschrieben 13. Oktober 2017 (bearbeitet) Oftmals ist es ja so, dass solche Programme nur der Einstieg sind und später zum Beispiel noch erweitert werden. Ansonsten wird es so gemacht, damit man es direkt richtig lernt. Um die Eindeutigkeit zu wahren, sollte man seinem Code immer einen Namespace zuordnen. Genauso wie jegliches Coding immer in einer Klasse stattfinden muss. In diesem Fall nunmal "class Hello"! vor 20 Minuten schrieb N_Gnom: Im obigen Beispiel exisitiert ja kein Zugriff auf Helloworld und Hello. Natürlich existiert der Zugriff auf beides. Da du zum Einen in diesem Namespace operierst und zum anderen die Main-Methode in der Klasse Hello aufgerufen wird. Bearbeitet 13. Oktober 2017 von Rienne Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Whiz-zarD Geschrieben 13. Oktober 2017 Teilen Geschrieben 13. Oktober 2017 (bearbeitet) vor 37 Minuten schrieb N_Gnom: Wenn ich eine standalone .exe compiliere, brauche ich doch theoretisch weder den namespace Helloworld, noch die Klasse Hello. Ich weiß dass das so standard ist, aber wozu an dieser Stelle? Regeln der Objektorientierung: Alles ist ein Objekt Objekte kommunizieren durch das Senden und Empfangen von Nachrichten (welche aus Objekten bestehen) Objekte haben ihren eigenen Speicher (strukturiert als Objekte) Jedes Objekt ist die Instanz einer Klasse (welche ein Objekt sein muss) Die Klasse beinhaltet das Verhalten aller ihrer Instanzen (in der Form von Objekten in einer Programmliste) Um eine Programmliste auszuführen, wird die Ausführungskontrolle dem ersten Objekt gegeben und das Verbleibende als dessen Nachricht behandelt Du kannst also keine Methode implementieren, die nicht in einer Klasse steckt. Eine .exe ist im Grunde auch nichts anderes als eine .dll. Die .exe besitzt aber als Information, dass sie ausführbar ist und weil sie ausführbar ist, braucht sie einen Einstiegspunkt. Unter C# gilt als Einstiegspunkt immer eine Klasse, die die statische Main()-Methode implementiert. Du kannst ja mal gerne versuchen, eine weitere Klasse zu erzeugen, die eine statische Main()-Methode besitzt. Du wirst ein Kompilierfehler bekommen, weil er nun nicht weiß, welchen Einstiegspunkt er nehmen soll. Die Methode muss auch statisch sein, weil sie ein Merkmal der Klasse ist und nicht einer Instanz. Im Zuge mit .Net Core wird es auch wohl in ferner Zukunft keine .exe mehr geben, sondern nur noch .dll, weil man die Anwendungen für verschiedene Systeme kompilieren kann und über die Runtime sagt, welche .dll man starten möchte. Bearbeitet 13. Oktober 2017 von Whiz-zarD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.