C# Konstrukoren "erben"

Gast #1400753
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
#1400760
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
}
Gast #1400773
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ß
#1400777
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
#1403679
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
    }
Gast #1403738
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren