Autor Beitrag
CarpeDiem
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 128

WIN XP
Borland C++ 2002, CodeGear C++ 2007, C# (VS 2008)
BeitragVerfasst: Di 13.04.10 20:16 
Hallo,

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

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


ausblenden 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.

_________________
Stefan - Carpe Diem
Es ist keine Schande zu fallen, eine Schande ist nur nicht wieder aufzustehen
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 128

WIN XP
Borland C++ 2002, CodeGear C++ 2007, C# (VS 2008)
BeitragVerfasst: 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)"?
ausblenden C#-Quelltext
1:
2:
3:
4:
public Circle(double radius, int xPos, int yPos) : this(radius) { 
  XKoordinate = xPos; 
  YKoordinate = yPos; 
}

_________________
Stefan - Carpe Diem
Es ist keine Schande zu fallen, eine Schande ist nur nicht wieder aufzustehen
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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:
msdn.microsoft.com/e...ibrary/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:

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


ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 128

WIN XP
Borland C++ 2002, CodeGear C++ 2007, C# (VS 2008)
BeitragVerfasst: Mi 14.04.10 12:30 
Dankeschön :D

_________________
Stefan - Carpe Diem
Es ist keine Schande zu fallen, eine Schande ist nur nicht wieder aufzustehen