PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# Objekt auf Instanz prüfen


Gast
2006-02-02, 15:16:41
Hallo,

ich habe ein Problem in C#. In einer Endlosschleife wird auf eine Datenbankverbindung gewartet. So lange noch keine Verbindung besteht, wird ein Hinweisfenster (myForm1) angezeigt. Kommt die Verbindung zustande, wird das Fenster, sofern es vorher geöffnet war, geschlossen.

.
Form1 myForm1;
.
.
do
{
// Datenbank verbinden
.

if (Fehler)
{
if (myForm1 == null) // wurde noch nicht instanziert <<-- hier erscheint die Fehlermeldung des Compilers
{
myForm1 = new Form1();
myForm1.Show();
}
}
else
{
if (myForm1 != null) // wurde instanziert
myForm1.Close();
return (0);
}
}
while (true)

Beim Compilieren meldet C# immer "Verwendung der nicht zugewiesenen lokalen Variablen 'myForm1'.

Natürlich kann ich das einfach umgehen, wenn ich das Objekt sofort instanziere.Form1 myForm1 = new Form1();Aber ich will das Fenster nicht in den Speicher laden, so lange ich es nicht benötige.

Wie kann ich unter C# feststellen, ob ein Objekt schon instanziert wurde?

Gnafoo
2006-02-02, 15:19:26
Iirc reicht ein einfaches:

Form1 myForm1 = null;


oben, damit sich der Compiler nicht mehr beschwert. Kann es aber grad nicht nachprüfen.

Monger
2006-02-02, 15:20:41
Ganz dämliche Frage:

Was wenn du zu Anfang schreibst:


Form1 myForm = null;


Ich bin nicht sicher, ob in C# grundsätzlich alle Deklarationen mit null vorbelegt sind. In Java ist es so, aber...

Gast
2006-02-02, 15:24:28
Hey, das ging ja superschnell!

Und das Beste: Es funktioniert!

Danke!

grakaman
2006-02-02, 15:35:54
Ich bin nicht sicher, ob in C# grundsätzlich alle Deklarationen mit null vorbelegt sind. In Java ist es so, aber...

Wenn die Form als Instanzfeld deklariert wäre, wäre es logischerweise nicht nötig gewesen. Da er sie aber in einer Methode stehen hat, schon.

Gast
2006-02-02, 15:44:16
Ich bin nicht sicher, ob in C# grundsätzlich alle Deklarationen mit null vorbelegt sind. In Java ist es so, aber...

Nö machts nicht. Wenn dus nicht machst gibts nen Compiler Fehler (kein Warning!, use of uninstantiated blablabla)

Monger
2006-02-02, 19:46:48
Wenn die Form als Instanzfeld deklariert wäre, wäre es logischerweise nicht nötig gewesen. Da er sie aber in einer Methode stehen hat, schon.

Verstehe ich nicht. Bei Java ist das völlig egal - sowohl Attribute als auch Variablen sind bei Deklaration von vornherein erstmal null, so dass man auch auf null prüfen kann.

Bei C# ist das offensichtlich anders, allerdings erschließt sich mir die Logik dahinter nicht.

grakaman
2006-02-02, 20:51:01
Verstehe ich nicht. Bei Java ist das völlig egal - sowohl Attribute als auch Variablen sind bei Deklaration von vornherein erstmal null, so dass man auch auf null prüfen kann.

Bei C# ist das offensichtlich anders, allerdings erschließt sich mir die Logik dahinter nicht.

Ja, habe mich etwas blöd ausgedrückt. Ich bezog mich nur auf C# und da werden nur Klassenvariablen automatisch vom Compiler initialisiert, aber keine temporären, also localen Variablen.

Xmas
2006-02-02, 23:25:18
Verstehe ich nicht. Bei Java ist das völlig egal - sowohl Attribute als auch Variablen sind bei Deklaration von vornherein erstmal null, so dass man auch auf null prüfen kann.

Bei C# ist das offensichtlich anders, allerdings erschließt sich mir die Logik dahinter nicht.
Häufig heißt es: "Explizit ist besser als implizit", aber dann ist das Ganze etwas inkonsequent gelöst. IMO sollte man immer explizit initialisieren, wenn es nicht benötigt wird kann der Compiler immer noch wegoptimieren.