wie Array eines Objektes aufbauen...
-
Hallo Leute,
ich habe mal wieder ein Problem. Ich habe eine Klasse Mitarbeiter angelegt.
Und wenn ich eine Instanz a anlege, geht das Programm hoch in meine Klasse und initiiert diese Instanz. Danach kann ich auch auf die Methoden dieser Klasse zugreifen.Nun will ich aber ein ganzes Array von Instanzen dieser Klasse haben!
Also, da Arrays ja selbst Klassen sind, verwende ich den new-operator:
Mitarbeiter[] staff = new Mitarbeiter[50];
Danach ist das Feld staff angelegt, aber alle Instanzen sind leer.
Wenn ich nun ein Feld füllen will (siehe Stelle X2 im u.a. Listing), bekomme ich einen Laufzeitfehler:
System.NullReferenceException wurde nicht behandelt.
Message="Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
Source="meineTests"
...So ganz dunkel ahne ich, was das Problem ist! Ich habe keine Instanzen der Klasse erzeugt. Ich sehe ja auch, dass in der Zeile X nicht nach oben gesprungen wird, um die Datenfelder zu füllen.
Was ist hier falsch?
Danke für Eure Hilfe!Gruß,
Micha
und hier das Listing:
using System; using System.Collections.Generic; using System.Text; namespace meineTests { class Programm { class Mitarbeiter { public string Name = "A"; public string Vorname = "B"; public int Gehalt = 1000; public void Dateneinlesen() { Console.WriteLine("Name:"); Name=Console.ReadLine(); } public void Gehaltsfestlegung(int Gehalt) { this.Gehalt = Gehalt; } public void Gehaltserhöhung(int Betrag) { Gehalt += Betrag; } } static void Main(string[] args) { Mitarbeiter a = new Mitarbeiter(); Mitarbeiter b = new Mitarbeiter(); a.Gehaltsfestlegung(1000); int Betrag = (int) (a.Gehalt * 0.1); a.Gehaltserhöhung(Betrag); X Mitarbeiter[] staff = new Mitarbeiter[50]; int anz=staff.Length; for (int i = 0; i < staff.Length; i++) { X2 staff[i].Dateneinlesen(); // hier kommt der Fehler if (staff[i].Name=="") return; } } } }
-
Ganz recht. Mit
Mitarbeiter[] staff = new Mitarbeiter[50];
erstellst du ein Array, allerdings noch keine Mitarbeiter. Du musst für jedes Element des Arrays noch ein
staff[i] = new Mitarbeiter();
machen, bevor du wirklich Referenzen in deinem Array hast.
-
Ganz recht, Du erzeugst keine Objekte der Klasse, sondern nur das leere Array
Mitarbeiter[] staff = new Mitarbeiter[50]; int anz=staff.Length; for (int i = 0; i < anz-1; i++) { staff[i] = new Mitarbeiter(); staff[i].Dateneinlesen(); }
etwa so sollte es gehn.
[edit]Michael E war wieder mal schneller[/edit]
-
Ja richtig! Jetzt, da Ihr den Code aufgeschrieben habt, ist alles ganz logisch! Da hätte ich auch allein drauf kommen können!
Danke!
Gruß,
Micha