Konstruktor - was ist das genau?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Den Konstruktor erkennst du, wie andere auch schon erwähnt haben daran das er kein Datentyp erhält und gleich heißt wie die Klasse. 

Ein Konstruktor unterscheidet sich in so fern von einer normalen Methode dass Sie nicht aufgerufen werden kann. Sie wird nämlich automatisch aufgerufen wenn man eine Instanz einer Klasse erstellt. Jede Klasse von denen man eine Instanz erstellen kann hat auch einen Konstruktor. Der Konstruktor kann wie "normale" Methoden auch Argumente annehmen. Diese sind zu gebrauchen um die Instanz genauer zu definieren als nur "eine Instanz der Klasse X".

Zum Beispiel will ich ein Ball mit der größe 10 erstellen. Die Klasse "Ball" gibt es schon. Dann würde man so einen Ball erstellen:

Ball neuerBall = new Ball(10);

Die 10 die ich dabei übergeben habe wird direkt an den Konstruktor weitergegeben damit dieser die Instanz "neuerBall" auf meine Größe 10 einstellt. Vielleicht hat die Klasse "Ball" ein Attribut was besagt ob es ein großer Ball ist oder ein Kleiner. So würde der Konstruktor ca. so aussehen:

public Ball(int größe){
       if(größe > 5){
              istEinGroßerBall = true;
      }else{
              istEinGroßerBall = false;
       }
}

So kannst du immer abfragen ob "neuerBall.istEinGroßerBall" true ist um zu erkennen ob es sich um einen großen Ball handelt oder ein kleinen.

Woher ich das weiß:Berufserfahrung – Beruf, Schule, Hobby und eigene Erfahrungen

ANDROUDT 
Beitragsersteller
 06.09.2016, 21:08

Vielen vielen Dank - jetzt habe ich es verstanden. 

1
ANDROUDT 
Beitragsersteller
 07.09.2016, 17:29
@ANDROUDT

Hi, 

kannst du mir evtl. noch eine kleine Frage beantworten?

Ich habe jetzt diesen Code: 

class Auto
{
private int baujahr;
private int leistung;
public Auto()
{
Console.WriteLine("Das Objekt wurde angelegt!!");
Console.ReadLine();
}
}

public class Program
{
public static void Main()
{
Auto mercedes = new Auto();

}
}

Die Aufgabe ist :

Ändern Sie den Konstruktor des Beispiels so um, dass bei dem Anlegen des Objektes automatisch die Werte für Baujahr und Leistung mit übergeben werden.

Wäre das dann so richtig?

Console.WriteLine("Das Objekt wurde angelegt!! +baujahr, +leistung);

LG

0
ANDROUDT 
Beitragsersteller
 07.09.2016, 17:33
@ANDROUDT

public int baujahr; 
public int leistung; 

0

ich glaube die Seite erklärts besser als ich es kann ;)

http://www.codefieber.de/programmierung-1/constructor-in-c-was-ist-das-3076

z.B du möchtest ein Spiel programmieren, dann gibt es einen Kämpfer bzw. die Klasse

public class Fighter{ 
int angriff;

 public Fighter(){
   //erzeugt einen Kämpfer ohne irgendwas
   // angriff wird = 0 sein
 }

 public Fighter(int a){
   angriff = a;
   // dieser kömpfer hat dann angriff = a;
 }
}

erkennen tut man ihn daran dass er gleich wie die Klasse heißt


ANDROUDT 
Beitragsersteller
 06.09.2016, 21:09

Danke - das Beispiel hat sehr geholfen. 

0

Ein Konstruktor ist im Grunde eine normale Methode, die aber automatisch beim Instanziieren der Klasse ausgeführt wird. Eine einfache Methode musst du per Hand aufrufen - ein Konstruktor wird quasi während des "new XYZ()"-Statements ausgeführt.

Darin kann man ganz einfach ein paar Dinge erledigen, welche eine Art Vorbedingung vor dem Benutzen der Klasse sind. Datenbankverbindungen aufbauen, verschiedene Variablen vorbelegen, ... - eben die Dinge erledigen, die man vor dem benutzen jeder public-Methode der Klasse sowieso tun müsste.

Das ist übrigens nicht von der Programmiersprache C# abhängig - sondern Gang und Gebe in quasi jeder objektorientierten Programmiersprache.

Wie hier schon geschrieben wurde: den Konstruktor erkennst du daran,
dass er eine public-Methode ist, welche exakt wie der Klassenname
lautet.

Man kann Objekte auch mittels Methoden initialisieren, aber Konstruktoren sind bequemer, weil sie beim Erzeugen einer Instanz automatisch aufgerufen werden.

Für gewöhnlich werden im Konstruktor Klassenvariablen instanziiert, Speicher reserviert und Variablen vorbelegt. 
Im Destruktor wird dann aufgeräumt und der ganze, reservierte Kram wieder freigegeben.

Woher ich das weiß:Berufserfahrung – Programmierer