www.mikrocontroller.net

Forum: PC-Programmierung C# Konstrukoren "erben"


Autor: planloser Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chris K. (chrisk86)
Datum:

Bewertung
0 lesenswert
nicht 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:
using System;
public class BaseClass
{
    int num;

    public BaseClass()
    {
        Console.WriteLine("in BaseClass()");
    }

    public BaseClass(int i)
    {
        num = i;
        Console.WriteLine("in BaseClass(int i)");
    }

    public int GetNum()
    {
        return num;
    }
}

public class DerivedClass : BaseClass
{
    // This constructor will call BaseClass.BaseClass()
    public DerivedClass() : base()
    {
    }

    // This constructor will call BaseClass.BaseClass(int i)
    public DerivedClass(int i) : base(i)
    {
    }

    static void Main()
    {
        DerivedClass md = new DerivedClass();
        DerivedClass md1 = new DerivedClass(1);
    }
}

Autor: planloser Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Chris K. (chrisk86)
Datum:

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

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

Lg, Chris

Autor: planloser Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da warst Du wohl etwas schneller.

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

Alex

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht 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!"

Autor: planloser Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.
    public myRS232(string portName, int baudRate) : base(portName, baudRate)
    {
        //weiterer Code

        // hier wird alles initialisiert, was eine myRS232 mehr kann
        // als die base-Klasse von der sie abgeleitet ist.
    }

Autor: planloser Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.