PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wo ist die While-Schleife? C#


Expandable
2005-07-08, 15:33:44
Hallo,

ich habe gerade mal damit begonnen, mich etwas in C# einzuarbeiten. Ich habe hierbei ein kleines Problem. Angenommen, wir haben eine Windows Console Anwendung, die ausgibt, dass man "a" eingeben soll, um das Programm neu zu starten, und "b", um es zu beenden. Nicht sehr sinnvoll, aber es soll ja nur mein Problem verdeutlichen. Dann würde man es wohl so machen (kein richtiger Code):

while (true)
{
Ausgabe: Geben Sie a oder b ein
Eingabe wird in Variable gespeichert

if Eingabe ist b
break;
}

So. Angenommen wir haben jetzt eine Windows .NET Anwendung. Man klickt auf einen Button, es kommt eine Nachricht. Diese schließt man, dann kann man wieder auf den Button klicken, und so weiter.

Da hat man dann den Code zur Initialisierung des Formulars und sonst doch nur den Event Handler des Buttons:

void Button1Click(object sender, System.EventArgs e)
{
MessageBox.Show("blabla", "bblaaa");
}

Aber man hat nirgendwo eine While-Schleife, mit der man das Programm von vorn beginnt. Wo ist die? Oder wird diese implizit durch das .NET-Framework erstellt?

Eine weitere Frage betrifft das Wörtchen "internal". Was genau ist da der Unterschied zu "private"?

Danke für Eure Hilfe!!

Gast
2005-07-08, 15:41:10
Windowsprogramme funktionieren so nicht, sie sind ereignisorientiert. Das heißt, dass das Programm auf ein Ereignis (z.B. eine Eingabe oder ein Mausklick) von dir wartet und dann reagiert.

Du müsstest also ein Formular entwerfen, das ein Eingabefeld (Textfeld) und eine Schaltfläche hat. In das Eingabefeld gibt der Anwender nun etwas ein und klickt auf die Schaltfläche. Deine Anwendung reagiert nun auf das Click-Ereignis und wertet die Eingabe aus. Alternativ kannst du auch das Change-Ereignis des Textfeldes abfragen.


Pseudocode:
void buttonclick
{
if text1.text == "Ja"
msgbox "Sie haben " + text1.text + " eingegeben.";
}

Expandable
2005-07-08, 16:21:12
Aaaaaachso... also ist das was ganz was anderes? Das heißt also, mit Application.Run wird das Programm gestartet, d.h. das Formular erstellt. Dann passiert einfach gar nichts mehr. Sollte sich der Anwender in ein paar Jahren dann mal entscheiden, auf irgendwas zu klicken, dann führt das Programm die entsprechende Aktion aus. Und dann wartet es wieder. Beendet wird es nur, wenn ein Exit-Ereignis kommt (also Klick auf Close-Button oder so).

Da steht also ein völlig anderes Konzept dahinter. Okay, danke!

Die Frage wegen internal und private bleibt noch.

Noch etwas: C# hat ja eine automatische Garbage Collection. Aber woher weiß C#, wann ich ein Objekt nicht mehr brauche? Muss ich es irgendwie "löschen", also wie in PHP z.B. mit unset($objectName)?

Coda
2005-07-08, 16:43:42
Wenn du es manuell löschen müsstest, wäre es ja nicht mehr automatisch.

Sobald keine Referenzen mehr auf ein Objekt zeigen wird es irgendwann von der Müllabfuhr entsorgt.

Zu internal und private kann ich nur sagen ohne es zu wissen: RTFM?!?

Expandable
2005-07-08, 16:53:23
Zu Internal und private: Habe ich, aber ich hab's nicht ganz verstanden.

Ja, wenn keine Referenz mehr auf das Objekt zeigt. Also muss ich alle Referenzen loswerden, sprich löschen. Das ist ja auch das, was das unset() in PHP macht ;)

zeckensack
2005-07-08, 17:26:27
Zu Internal und private: Habe ich, aber ich hab's nicht ganz verstanden.

Ja, wenn keine Referenz mehr auf das Objekt zeigt. Also muss ich alle Referenzen loswerden, sprich löschen. Das ist ja auch das, was das unset() in PHP macht ;)Referenzen verschwinden automatisch, wenn der "Scope", in dem sie deklariert wurden, verlassen wird.
Ein Scope kann zB eine Funktion sein. Eine lokale Referenz in einer Funktion verschwindet automatisch im Nirvana, sobald die Funktion verlassen wird.

Expandable
2005-07-08, 17:59:45
Hmm, stimmt eigentlich. Okay, danke vielmals ;)