Forum: PC-Programmierung C# Konstrukoren "erben"


von planloser Gast (Gast)


Lesenswert?

Hallo,

ich habe folgende Frage:

ich möchte von der Klasse SerialPort eine eigene Klasse myRS232 erben. 
Nun werden ja Konstrujktoren nicht mitvererbt. Ich möchte gern, dass die 
Konstruktoren meine Klasse genau die gleiche Funktionalität haben wie 
die von SerialPorts. Wie bewerksteliige ich das am einfachsten? Kurz, 
gibt es eine Möglickeit, die Konstruktoren von SerialPort "mitzuerben"?

Grüß, Alex

von Chris K. (chrisk86)


Lesenswert?

Wie wäre es denn, wenn du in der erbenden Klasse einen Konstruktor mit 
den gleichen Argumenten schreibst und darin den der "Eltern"-Klasse über 
base aufrufst?

Chris

Nachtrag: Hier ist noch ein Beispiel, wie man es auch machen kann aus 
der MSDN:
1
using System;
2
public class BaseClass
3
{
4
    int num;
5
6
    public BaseClass()
7
    {
8
        Console.WriteLine("in BaseClass()");
9
    }
10
11
    public BaseClass(int i)
12
    {
13
        num = i;
14
        Console.WriteLine("in BaseClass(int i)");
15
    }
16
17
    public int GetNum()
18
    {
19
        return num;
20
    }
21
}
22
23
public class DerivedClass : BaseClass
24
{
25
    // This constructor will call BaseClass.BaseClass()
26
    public DerivedClass() : base()
27
    {
28
    }
29
30
    // This constructor will call BaseClass.BaseClass(int i)
31
    public DerivedClass(int i) : base(i)
32
    {
33
    }
34
35
    static void Main()
36
    {
37
        DerivedClass md = new DerivedClass();
38
        DerivedClass md1 = new DerivedClass(1);
39
    }
40
}

von planloser Gast (Gast)


Lesenswert?

Hallo Chris,

ich kann mir zwar vorstellen, was Du meinst. Weiß allerdings nicht, wie 
das syntaktisch aussehen soll.

So in etwa:

public myRS232(string portName, int baudRate) : base(SerialPort(string 
portName, int baudRate)){}

???

Gruß

von Chris K. (chrisk86)


Lesenswert?

Fast ;)
Ich hab oben zwei verschiedene Möglichkeiten beschrieben... die erste 
wäre in der myRS232 den Constructor so zu schreiben
1
public myRS232(string portName, int baudRate)
2
    {
3
        base(portName, baudRate);
4
        //weiterer Code
5
    }

Die zweite Möglichkeit (eleganter) wäre:
1
// This constructor will call BaseClass.BaseClass(int i)
2
    public myRS232(string portName, int baudRate) : base(portName, baudRate)
3
    {
4
        //weiterer Code
5
    }

Lg, Chris

von planloser Gast (Gast)


Lesenswert?

Da warst Du wohl etwas schneller.

Hast mir sehr geholfen. Danke und schönes Wochenende.

Alex

von Arc N. (arc)


Lesenswert?

planloser Gast schrieb:
> Hallo Chris,
>
> ich kann mir zwar vorstellen, was Du meinst. Weiß allerdings nicht, wie
> das syntaktisch aussehen soll.
>
> So in etwa:
>
> public myRS232(string portName, int baudRate) : base(SerialPort(string
> portName, int baudRate)){}
>
> ???
>
> Gruß

Siehe Post im anderen Thread:
Beitrag "Re: Suche C# Profi!"

von planloser Gast (Gast)


Lesenswert?

Hallo,

eine Frage hätte ich noch:

kann ich den übernommenen Konstruktor auch erweitern, z.B um zugefügte 
Eigenschaften der Klasse zu initialisieren usw.?

Danke und Gruß, Alex

von Karl H. (kbuchegg)


Lesenswert?

planloser Gast schrieb:
> Hallo,
>
> eine Frage hätte ich noch:
>
> kann ich den übernommenen Konstruktor auch erweitern, z.B um zugefügte
> Eigenschaften der Klasse zu initialisieren usw.?

Ich denke an dieser Stelle ist es Zeit den Hinweis zu bringen:
Du brauchst Literatur!
Das alles sind Grundlagen und in jedem noch so grindigen Buch 
beschrieben.


Der Konstruktor der abgeleiteten Klasse ruft den Konstruktor der 
Basisklasse (damit ist der geerbte Teil erledigt) und in seinem eigenen 
Codeteil initialisiert er seine eigenen Member.
1
    public myRS232(string portName, int baudRate) : base(portName, baudRate)
2
    {
3
        //weiterer Code
4
5
        // hier wird alles initialisiert, was eine myRS232 mehr kann
6
        // als die base-Klasse von der sie abgeleitet ist.
7
    }

von planloser Gast (Gast)


Lesenswert?

Ich hab 'n Buch, das ist auch schrecklich dick, aber vielleicht ist das 
ja das Problem. Ich hab's jedenfalls gerade nach längerem Suchen 
gefunden. Allerdings unter einem anderen Kontext. Danke für Deine Hilfe.

Gruß, Alex

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.