Laden...

C# Auf werte eines Benuterdefinerten Klassen-Arrays zugreifen

Erstellt von kampfsau vor 14 Jahren Letzter Beitrag vor 14 Jahren 874 Views
K
kampfsau Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren
C# Auf werte eines Benuterdefinerten Klassen-Arrays zugreifen

Hallo,

ich hänge jetzt schon 2h an dem problem und hoffe mir kann wer helfen! 😃

Also: ich habe eine neue klasse names "Feld" erstellt. diese hat unter anderem einen wert "Mine" der bool und auch public ist. nun habe ich im "hauptprogramm" ein array:"Feld[,] Felder = new Feld[9,9]" angelegt. (eigentlich müsste es doch "new Feld()[9,9] heißen oder? geht aber nicht..(Indizierung mit [] kann nicht auf einen Ausdruck vom Typ "Minessweeper_Beta1.Feld" angewendet werden.)) so.. nun möchte ich mittels "Felder[0,0].Mine = true;" einem bestimmten Feld den Wert "Mine = true" zuordnen. Das Programm wird ohne Felder kompiliert jedoch erscheint dann die Fehlermeldung: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

so ich hoffe es ist verständlich und nun warte ich gespannt auf eure antworten..

lg

343 Beiträge seit 2007
vor 14 Jahren

Hallo kampfsau (cooler Name),

Also deine 2 Fragen lassen sich in einem beantworten:
1.) es heißt nicht new Feld()[9,9] weil das den Anschein erwecken würde dass ein Konstruktor von Feld aufgerufen wird (was nicht der Fall ist)

2.) jetzt müsste auch klar sein warum du nicht auf Felder[0,0].Mine zugreifen kannst. Weil in deinem Feld noch gar keine Objekte sind. Du hast zwar ein Feld, aber überall steht _null _drinnen. Und null.Mine gibts natürlich nicht, deshalb die Fehlermeldung.

Du müsstest zuerst alle Felder einmal erstellen denn mit Felder = new Feld[9,9] reservierst du quasi nur einmal Speicherplatz:


for(int i = 0; i < 9; i++)
{
  for(int j = 0; j < 9; j++)
  {
    Felder[i,j] = new Feld();
  }
}

Kleiner Tipp anbei: in Zukunft musst du außerdem darauf achten keine Anfängerfragen zu stellen (deine obige Frage ist da meiner Meinung nach noch ein Grenzfall), manche im Forum sind da recht streng. Aber du hast Glück dass um diese Uhrzeit scheinbar niemand da ist 😁

Liebe Grüße
Preli

[- www.saftware.net -](http://www.saftware.net/)
49.485 Beiträge seit 2005
vor 14 Jahren

Hallo kampfsau,

1.) es heißt nicht new Feld()[9,9] weil das den Anschein erwecken würde dass ein Konstruktor von Feld aufgerufen wird (was nicht der Fall ist)

es geht nicht nur um den Anschein. Es würde damit tatsächlich ein (einzelnes) Objekt vom Typ Feld erzeugt werden und eben nicht ein Array, wie du das möchtest.

int i = new List<int> () [20]; wäre z.B. syntaktisch korrekt, wenn auch nicht sinnvoll. Es würde dadurch eine Liste erzeugt und dann gleich auf das einundzwanzigste Element zugegriffen (was nicht existiert, weshalb auch eine Exception geworfen wird). Syntaktisch geht das. Also () immer weglassen, wenn du Arrays des Typs statt einzelne Objekte des Typs erzeugen willst.

Beachte aber bitte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

nun möchte ich mittels "Felder[0,0].Mine = true;" einem bestimmten Feld den Wert "Mine = true" zuordnen. [...] jedoch erscheint dann die Fehlermeldung: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

Siehe [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

Hallo preli,

in Zukunft musst du außerdem darauf achten keine Anfängerfragen zu stellen

Anfängerfragen - im Sinne von Fragen von Anfängern - sind kein Problem. Die sind natürlich erlaubt. Problem sind die Fragen nach Grundlagen. Also Fragen, die man nicht stellen muss, wenn man ein C# Buch durchgearbeitet hat. Oder eben - wie in diesem Fall - in die FAQ geschaut hätte.

herbivore