Autor Beitrag
impete
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 08.08.12 22:28 
Hallo,
ich beginne gerade meine erste Programmiersprache (C#) zu erlernen. In dem Buch, das ich mir dafür gekauft habe und das anscheinend "Ideal für Programmieranfänger geeignet" sein soll, steht nun folgendes:
"Zur Einstellung der Position dient die Struktur Point. Ein Objekt dieser Struktur liefert ein Wertepaar. In diesem Programm wird mit new jeweils ein neues Objekt der Struktur Point erzeugt, um das Wertepaar bereitzustellen."
Meine Frage ist nun (ja, es ist eine noob Frage), was denn bitte Objekte und Strukturen sind und wie ich mir das besser vorstellen kann. In dem Buch wurde bis gerade noch kein einziges Wort darüber verloren. Falls nötig: Es geht in dem Programm darum, die Position und Größe eines Buttons während der Laufzeit durch 4 weitere Buttons zu verändern.

Code für einen dieser Buttons:
ausblenden C#-Quelltext
1:
2:
3:
cmdTest.Location = new Point(
  cmdTest.Location.X + 20,
  cmd Test.Location.Y);

Ich verstehe natürlich, dass damit der X Wert um 20 relativ von der aktuellen Position erhöht wird und der Y Wert unverändert bleibt. Allerdings verstehe ich das mit new Point nicht ganz, wie gesagt, weil ich nicht weiss was man sich unter Objekten und Strukturen in diesem Falle vorstellen kann.

Danke schonmal im Vorraus.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 08.08.12 23:32 
Zur Unterscheidung zwischen Klassen und Strukturen siehe dir die Hilfe in der MSDN an.

Der entscheidende Unterschied (meine persönliche Kurzfassung der Hilfe) zwischen Klassen(class) und Strukturen(struct) ist das Klassen Referenzsemantik benutzen und Strukturen Kopiersemantik verwenden.

Ein Integer ist zum Beispiel eine struct. Wenn du zum Beispiel sowas machst

ausblenden C#-Quelltext
1:
2:
3:
int i = 5;
int j = i;
j = 6;


erwartest du nachher(korrekterweise) das i immer noch 5 ist. Das ist so weil in der zweiten Zeile i nach j kopiert wurde. Wäre ein Integer ein Klasse würden i und j auf den selben Integer zeigen und auch in i nach der 3.ten Zeile 6 stehen(da i und j ja auf das gleiche verweisen würden).

In deinem Beispiel ist Point ein struct darum musst du zum ändern einen neuen erzeugen und wieder zuweisen. Viele Programmierer denen der Unterschied zwischen struct und class nicht bewußt ist würden anstatt dem Weg aus deinem Beispiel es erstmal so probieren

ausblenden C#-Quelltext
1:
cmdTest.Location.X = cmdTest.Location.X + 20;					


Das kann aber nicht gehen da der Zugriff auf Location.X dir eine Kopie des Points in Location liefert und eine Kopie zu ändern bringt nichts du willst ja die wirkliche Location ändern. Da wird auch schon der Compiler eingreifen und dir sagen das im hier ein Variable fehlt. GAnz einfach weil du ein implizit erstellen struct änderst aber niemand diesen struct danach verwenden kann da keine Variable auf ihn verweist.

Für diesen Beitrag haben gedankt: impete