Entwickler-Ecke
Sonstiges (.NET) - Instanz einer Klasse erzeugen und global zugreifen
aequitas - Sa 03.08.13 17:30
Titel: Instanz einer Klasse erzeugen und global zugreifen
Hey,
ich habe ein Verständnisproblem. Ich lege mir eine Klasse in einem C# - Projekt an.
Anschließend möchte ich ein neues Objekt per Klick auf einen Button erstellen und
mit einem Klick auf einen weiteren Button mit dem Objekt arbeiten. Allerdings erscheint
folgender Fehler:
Der Name 'person1' ist im aktuellen Kontext nicht vorhanden.
Der kleine Beispiel-Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| namespace Test1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { Person person1 = new Person(); person1.SetName("Armin"); textBox1.Text = person1.name; }
private void button2_Click(object sender, EventArgs e) { person1.SetName("Bernd"); textBox1.Text = person1.name; } } } |
Die Klasse "Person" besitzt nur das Feld "name" und kann mit "SetName" gesetzt werden.
Wie muss ich nun vorgehen, dass die Klasse "global" verfügbar ist und nicht nur in
der "Button1"-Methode?
Danke euch schonmal :)
Gruß
Moderiert von
Th69: Code formatiert (Kommentare eingefügt), damit der Code syntaktisch korrekt ist
Th69 - Sa 03.08.13 18:03
Hallo aequitas,
(Klassen-)Membervariable ist das Stichwort, also außerhalb der Methode in der Klasse selbst deklarieren:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| class Form1 : Form { public Form1() { InitializeComponent(); }
private Person person1;
private void button1_Click(object sender, EventArgs e) { person1 = new Person(); person1.SetName("Armin"); textBox1.Text = person1.name; }
} |
Und nun überlege dir noch, was du tun mußt, um den Fehlerfall abzufangen, daß der Anwender zuerst den "Button2" klickt.
aequitas - Sa 03.08.13 18:43
Wunderbar, genau das, was ich wissen wollte. :-)
Ich hatte es vorher in der Form1()-Methode versucht, aber dann schaue ich mir
nochmal die Struktur der Dateien an.
Vielen Dank
P.S. die Abfrage, die du meinst, lautet vermutlich dann
C#-Quelltext
1: 2: 3: 4: 5:
| if (person1 != null) { person1.SetName("Bernd"); textBox1.Text = person1.name; } |
Grüße
Ralf Jansen - Sa 03.08.13 19:25
Das würde helfen aber überleg die auch ob das so überhaupt Sinn macht. Wieso sind Armin und Bernd überhaupt die gleiche Person Instanz? Bei OOP verhält es sich meist genauso wie im richtigen Leben wenn du 2 Personen darstellen willst sollten es vermutlich in der Anwendung auch 2 Instanzen der Person Klasse sein.
aequitas - So 04.08.13 10:16
Da hast du schon recht, mir ging es aber weniger um den Sinn und die Umsetzung in OOP.
Ich wollte nur von verschiedenen Methoden aus, auf eine Klasse (bzw. eher Instanz) zugreifen.
OOP habe ich über JAVA gelernt, nun schaue ich mir C# an, da mir die IDE, die Formular-Erstellung und auch sonst das ganze Modell besser gefällt. Zudem habe ich zum Schluss eine EXE-Datei, die einfacher zu handhaben ist.
Eine Konsolenanwendung aus nur einer Datei ist noch klar für mich, aber da die Formular-Anwendungen teilweise aus mehreren Dateien usw. bestehen, steig ich noch nicht 100%ig durch, was wo hinkommt.
Gruß
Moderiert von
Th69: Beitragsformatierung überarbeitet: unnötige Zeilenumbrüche entfernt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!