Entwickler-Ecke

C# - Die Sprache - Konstruktor mit this()


CarpeDiem - Di 13.04.10 20:16
Titel: Konstruktor mit this()
Hallo,

weiß jemand was der Unterschied zwischen den folgenden Zuweisungen ist?


C#-Quelltext
1:
2:
3:
4:
  public Circle(double radius) : this()
  { 
    this.Radius = radius; // Zuweisung 1
  }



C#-Quelltext
1:
2:
3:
4:
  public Circle(double radius) : this()
  { 
    Radius = radius; // Zuweisung 2 
  }


Was bewirkt eigentlich die Schnittstelle ": this()"?

Vielen Dank gleich mal.


Kha - Di 13.04.10 20:29

user profile iconCarpeDiem hat folgendes geschrieben Zum zitierten Posting springen:
weiß jemand was der Unterschied zwischen den folgenden Zuweisungen ist?
Es gibt keinen (solange du keine lokale Variable Radius einfügst). Um es klar zu stellen: Das hat nichts mit dem Konstruktor zu tun und funktioniert nicht nur bei Properties, sondern mit allen Membern der Klasse.

user profile iconCarpeDiem hat folgendes geschrieben Zum zitierten Posting springen:
Was bewirkt eigentlich die Schnittstelle ": this()"?
Interfaces bei Methoden? Das wäre interessant ;) .
Mit this(...) kannst du andere Konstruktoren derselben Klasse aufrufen, mit base(...) die der Base Class.


CarpeDiem - Di 13.04.10 20:48

Danke. Das heißt, ich benötige den "this()" bei überladenen Konstruktoren, also in diesem Fall?
Beziehungsweise, was bringt mir die folgende Parameterliste mit ": this(radius)"?

C#-Quelltext
1:
2:
3:
4:
public Circle(double radius, int xPos, int yPos) : this(radius) { 
  XKoordinate = xPos; 
  YKoordinate = yPos; 
}


Kha - Di 13.04.10 21:02

"Benötigen" tust du es überhaupt nicht, du vermeidest dadurch einfach, in beiden Konstruktoren den gleichen Code schreiben zu müssen. Also nicht anders, als es bei gewöhnlichen überladenen Methoden der Fall ist.

Ein base kann allerdings in manchen Fällen obligatorisch sein:
http://msdn.microsoft.com/en-us/library/ms173115.aspx hat folgendes geschrieben:
In a derived class, if a base-class constructor is not called explicitly using the base keyword, then the default constructor, if there is one, is called implicitly. This means that the following constructor declarations are effectively the same:


C#-Quelltext
1:
2:
3:
4:
public Manager(int initialdata)
{
    //Add further instructions here.
}



C#-Quelltext
1:
2:
3:
4:
public Manager(int initialdata) : base()
{
    //Add further instructions here.
}


If a base class does not offer a default constructor, the derived class must make an explicit call to a base constructor using base.


CarpeDiem - Mi 14.04.10 12:30

Dankeschön :D