Autor Beitrag
BlackMatrix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 04.12.10 17:51 
Hi.

Ist es möglich einen Konstruktor in der Elternklasse zu definieren, der automatisch für alle Kindklassen Pflicht wird oder muss der Konstruktor in jeder Kindklasse neu definiert werden?

Ich möchte gerne ein Objekt der Kindklasse wie folgt erzeugen:

ausblenden C#-Quelltext
1:
Kindklasse kind = new Kindklasse("Hans");					


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
abstract class Elternklasse
{
    public Elternklasse(string name)
    {

    }
}

class Kindklasse : Elternklasse
{

}


MfG


Moderiert von user profile iconKha: Topic aus Basistechnologien verschoben am Sa 04.12.2010 um 17:59
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 04.12.10 18:59 
user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
oder muss der Konstruktor in jeder Kindklasse neu definiert werden?
Ja, einfach die Signatur kopieren und direkt den Elternkonstruktor aufrufen.

_________________
>λ=
zenten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Sa 04.12.10 19:06 
Hallo BlackMatrix,

Konstruktoren der Elternklasse können nicht geerbt werden. Es wird lediglich der Default Kontruktor(Parameterlos) der Elternklasse aufgerufen.
Wenn du Konstruktoren der Elternklasse nutzen möchtest, kannst du das durch Konstruktorenverkettung erreichen.

Beispiel:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
    class Elternklasse
    {
        public Elternklasse(string name)
        {
            Console.WriteLine(name);
        }
    }

    class Subklasse : Elternklasse
    {
        public Subklasse(string name) :base(name)
        {

        }
    }


Das ":base(name)" ruft den Konstruktor aus der Elternklasse auf mit dem entsprechenenden Parameter "name".
":base()" identifiziert den aufzurufenden Konstrutor anhand der Parameter die zu übergeben werden.
Kann auch hier nachgelesen werden:openbook.galileocomp...345b32bb84ee346fab0d

Gruß
zenten

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt