Vererbung (Mehrfachvererbung)



  • Vielen Dank für die schnelle Antwort. Aber genau das Buch habe ich vor mir liegen. Es erschließt sich mit aber hieraus keine Möglichkeit der Mehrfachvererbung mit Hilfe eines Interfaces. Vielleicht sehe ich aber den Wald vor lauter Bäumen nicht.

    Gruß
    Sven

    EDIT: Ups, das ist doch nicht das Buch... werde mir das mal durchlesen. Danke.
    EDIT: Ich kann doch in einer Schnittstelle keine Methode implementieren. D.h. ich kann die Methoden die eigentlich schon in der Basisklasse implementiert sind, erst in der von Interface abgeleiteten Klasse implementieren. Das macht doch keinen Sinn.
    EDIT: Ich glaube ich habe es jetzt verstanden. Ich muss ein Interface definieren, das ich den drei Basisklassen vererbe. Die Klasse die das Interface erbt, also die abgeleitete Klasse, kann dann die Methoden der Basisklassen ausführen. Richtig?



  • Hmmm, nö das geht nicht... Ich stecke hierbei irgendwie fest. Wo habe ich den Knoten?

    Gruß
    Sven

    EDIT: Ich glaube ich jage da einen Phantom hinterher. Etwas das eben so wie ich es möchte nicht mehr (komme aus der C++ Welt) möglich ist. Verdammt.



  • Nabend, keiner ne Info für mich?

    Gruß
    Sven



  • Wie soll jemand eine sinnvolle Lösungsalternative vorschlagen ohne das zu Grunde liegende Problem zu kennen?

    Prinzipiell kann man auch mit Interfaces keine Merhfachvererbung realisieren, kurz gesagt: Es gibt keine Mehrfachvererbung. (Und dies ist eine digitale Aussage, entweder es gibt sie, oder es gibt sie nicht)

    Eine Klasse kann aber beliebig viele Interfaces implementieren, z.B:

    class A : IAnfang, IMitte, IEnde
      {
      }
    

    UNd Du programmierst dann gegen die Interfaces und nicht gegen die Klasse selbst.



  • die mehrfachvererbung wie du sie aus c++ kennst ist so verboten wurde, durch den "Deadly Diamond of Death" - sagt dir bestimmt was

    ich selber bin schon seit jeher ohne mehrfachvererbung ausgekommen (amsonsten, erstell doch ne dummy kette, ist aber haesslich)

    class derived : base1, base2, base3
    
    class derived : base1
    { .. }
    
    class base1 : base 2 {}
    class base2 : base 3 {}
    

    das problem dabei sind nur abstrakte klassen, da man die aufloesen muss



  • Hi,
    loks mein zu lösendes Problem habe ich schon geschildert. Ja, inzwischen habe ich es schon verstanden, dass eine "echte" Mehrfachvererbung nicht möglich ist.

    Mr. Evil, eben eine Dummykette ist hässlich und in meinem Fall auch nicht sinnvoll. Nun werde ich mich etwas umstellen und die Klassen-Hierarchie abändern. Blöd ist nur wenn man sich die Vorgehensweise einfach angewöhnt hat und nun aber nicht mehr möglich ist. Deswegen habe ich auch so verzweifelt nach einer Lösung gesucht. Aber mit dieser Einschränkung kann/muss ich leben. 😉

    Vielen Dank euch beiden.

    Gruß
    Sven



  • gortosch schrieb:

    Mr. Evil, eben eine Dummykette ist hässlich ...

    Mr Evil schrieb:

    ... ist aber haesslich)



  • Müssen denn alle 3 Basisklassen wirklich vererbt werden? Meistens reichen auch einfach Member.
    Und der Rest (d.h. die Kommunikation nach draußen) geschieht dann über Interfaces.
    Solange man jetzt nicht Hunderte von Methoden bzw. Unterklassen davon erzeugt, so ist daß auch keine große Schreibarbeit.

    Ansonsten stell doch einfach mal deine 3 Klassen hier schematisch vor...



  • Hi,
    danke für die Info.

    Ich hätte erst mal genauer über die Zusammenhänge der Klassen nachdenken sollen bevor ich hier meine Frage stelle. Es hat sich herausgestellt, dass eine Mehrfachvererbung völlig unnötig ist. Ich muss sagen, C# gefällt mir immer besser im Vergleich zu C++.

    Gruß
    Sven



  • gortosch schrieb:

    Nun, die Mehrfachvererbung ist ja, aus gutem Grund, in .Net nicht möglich.

    Welchen guten Grund meintest Du eigentlich? Gut, es hat Dir geholfen Dein Design nochmal zu überdenken. Was noch?



  • Hi,
    wurde schon erwähnt.

    Mr Evil schrieb:

    die mehrfachvererbung wie du sie aus c++ kennst ist so verboten wurde, durch den "Deadly Diamond of Death" - sagt dir bestimmt was

    Gruß
    Sven



  • Kein Grund es zu verbieten IMHO. Zumindest kein guter. 🙂


Anmelden zum Antworten