Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 von N_Gnom

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

 

  • Autor

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 von N_Gnom

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 von Rienne

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: 

  1. Alles ist ein Objekt
  2. Objekte kommunizieren durch das Senden und Empfangen von Nachrichten (welche aus Objekten bestehen)
  3. Objekte haben ihren eigenen Speicher (strukturiert als Objekte)
  4. Jedes Objekt ist die Instanz einer Klasse (welche ein Objekt sein muss)
  5. Die Klasse beinhaltet das Verhalten aller ihrer Instanzen (in der Form von Objekten in einer Programmliste)
  6. 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 von Whiz-zarD

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.