Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

j0ck

Frischling

  • »j0ck« ist der Autor dieses Themas
  • Private Nachricht senden

1

18.08.2011, 11:33

Kurze Verständnis Frage --> : this (XNA - C#)

Hallo,

ich bin gerade dabei ein Spiel zu programmieren. Als Hilfe habe ich das Buch von O'Reilly "Learning XNA 4.0". Dort sind ein paar Tutorials, die ich Schritt für Schritt nachbaue.
Noch kurz erwähnt: Ich bin absoluter C# Neuling und habe auch relativ wenige Programmierkenntnisse. :( :D

Nun zu meiner Frage:
Kann mir einer diesen Code mal etwas genauer erklären (vor allem, was das THIS genau macht):

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public Sprite(Texture2D textureImage, Vector2 position, Point frameSize, 
 int collisionOffset, Point currentFrame, Point sheetSize, Vector2 speed, string collisionCueName)
 : this(textureImage, position, frameSize, collisionOffset, currentFrame, sheetSize, speed, defaultMillisecondsPerFrame, collisionCueName)
 {
 }
 public Sprite(Texture2D textureImage, Vector2 position, Point frameSize,
 int collisionOffset, Point currentFrame, Point sheetSize, Vector2 speed, int millisecondsPerFrame, string collisionCueName)
 { 
 this.textureImage = textureImage;
 this.position = position; 
 this.frameSize = frameSize; 
 this.collisionOffset = collisionOffset; 
 this.currentFrame = currentFrame; 
 this.sheetSize = sheetSize;
 this.speed = speed;
 this.collisionCueName = collisionCueName;
 this.millisecondsPerFrame = millisecondsPerFrame;
 }


Ich habe eine Klasse "Sprite" erstellt. Und ich habe 2 Konstruktoren erstellt. Der Unterschied der beiden Konstruktoren ist "milliseconds" und "defaultMilliseconds".
Leider verstehe ich aber nicht so genau, was ich mit dem this Anfangen sollte! :(
Könnt ihr mir das kurz und knapp erklären?

Vielen Dank

/EDIT:

mit this.speed = speed erstelle ich eine Instanz der Variable speed? :-) Hab ich das richtig verstanden?

P.S.: Ich weiß gerade nicht, wieso der code keine Zeilenumbrüche macht! Sorry

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »j0ck« (18.08.2011, 11:49)


MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

2

18.08.2011, 11:46

Die Namen der Variablen von den Funktionsparametern und der Attribute sind gleich. Damit der Compiler nun weiß, welche der Variablen angesprochen werden soll, benutzt man den Objektzeiger this um auf die Klassenattribute zuzugreifen.

Quellcode

1
2
3
4
5
6
7
8
9
10
class A
{
   public A(int i)
   {
    this.i = i; //Die Variabel i der Klasse wird gesetzt
    i = 5;//i aus dem Parameter wird auf 5 gesetzt.
    i = i * i;//25 = 5 * 5; i aus der Klasse wird nicht geändert!
   }
   private int i;
}


Kein gutes Beispiel, auf die schnelle fiel mir nix besseres ein.
Einmal wird die lokale Variable genutzt, einmal die Klassenvariable, damit der Compiler das trennen kann, gibt es den Klassenzeiger this, der der Klassenvariable vorangestellt wird damit i nicht von dem Funktionsparameter i überdeckt wird.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

18.08.2011, 11:48

Wenn du die Sprache noch nicht beherrschst wäre es vielleicht besser erst einmal die zu lernen, bevor du mit einem Spiel anfängst...

Das this in deinem ersten Konstruktur gibt an, dass ein anderer Konstruktur der Klasse aufgerufen werden soll.

Das this im Code des zweiten Konstruktors sagt, dass ausdrücklich das aktuelle Objekt benutzt werden soll.
Wenn die Parameter und Attribute der Klasse unterschiedlich benannt wären, dann könntest du das auch weglassen.

j0ck

Frischling

  • »j0ck« ist der Autor dieses Themas
  • Private Nachricht senden

4

18.08.2011, 11:52

Danke für die schnellen Antworten.

Könntest du mir eventuell ein Buch oder einen Internet-Link empfehlen, dass die wichtiges Grundlagen abdeckt? Ich will jetzt kein Profi in dem Bereich werden, aber dennoch die Grundlagen verstehen können um ggf. kleinere Spiele zu entwickeln! :)

j0ck

Frischling

  • »j0ck« ist der Autor dieses Themas
  • Private Nachricht senden

5

18.08.2011, 11:57

Die Namen der Variablen von den Funktionsparametern und der Attribute sind gleich. Damit der Compiler nun weiß, welche der Variablen angesprochen werden soll, benutzt man den Objektzeiger this um auf die Klassenattribute zuzugreifen.

Quellcode

1
2
3
4
5
6
7
8
9
10
class A
{
   public A(int i)
   {
    this.i = i; //Die Variabel i der Klasse wird gesetzt
    i = 5;//i aus dem Parameter wird auf 5 gesetzt.
    i = i * i;//25 = 5 * 5; i aus der Klasse wird nicht geändert!
   }
   private int i;
}


Kein gutes Beispiel, auf die schnelle fiel mir nix besseres ein.
Einmal wird die lokale Variable genutzt, einmal die Klassenvariable, damit der Compiler das trennen kann, gibt es den Klassenzeiger this, der der Klassenvariable vorangestellt wird damit i nicht von dem Funktionsparameter i überdeckt wird.


Ah ok, das hab ich verstanden.
Wenn ich jetzt diese Eigenschaften der Klasse für eine andere Klasse verwenden möchte, dann mache ich einfach :

C#-Quelltext

1
2
3
4
5
public Sprite(Texture2D textureImage, Vector2 position, Point frameSize, 

 int collisionOffset, Point currentFrame, Point sheetSize, Vector2 speed, string collisionCueName)

 : base(textureImage, position, frameSize, collisionOffset, currentFrame, sheetSize, speed, defaultMillisecondsPerFrame, collisionCueName)


oder?

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

6

18.08.2011, 11:58

wenn die ein link reicht, hier ein open-book Handbuch C#

habs mir übrigends gekauft, finds als gebundenes buch weit besser ^^

Werbeanzeige