generische klasse abgeleitet von einer basisklasse



  • hallo
    ich hab mich mal wieder in c# einarbeitet, jetzt hab ich aber ein kleines problem.

    class BaseClass { ... }
    
    class NodeClass<Type> where Type : IComparable
    { ... }
    

    so nu mein problem, NodeClass soll aber auch von BaseClass ableiten, wie gehts das ?

    class NodeClass<Type> : BaseClass, where Type : IComparable
    { ... }
    

    so gehts ja nicht

    class NodeClass<Type> : where Type : IComparable, BaseClass
    { ... }
    

    so gehts auch nicht...

    ich hoffe mal das ist übhaupt möglich. aber ich würde keinen Grund sehen wieso das nicht möglich sein sollte...



  • Dein Versuch ergibt für mich keinen Sinn 😕
    Meiner Meinung nach müsste ja die Basisklasse auch schon ne Collection sein, und dann müsstest du dort IComparable implementieren. Wenn die Basisklasse keine Collection ist, was macht es dann für einen Sinn, eine Collection davon abzuleiten? (Keine direkte Kritik, nur als Verständnisfrage)



  • ach das war blos ein Beispiel mit IComparable und NodeClass ist auch nur ein Beispiel.
    Ich will ja blos einer Kindklasse eine Generic verpassen und dabei die Eigenschaften der Basisklasse noch mit haben.

    Das nächste mal schreib ich halt Foo und Bar 🤡



  • Muss ich das jetzt verstehen, was "einer Kindklasse eine Generic verpassen" heißt ?? Bitte ordne erst mal deine Gedanken und dann stell die Frage noch mal. 😉



  • Genau das frag ich mich auch die ganze Zeit. Kann sein das du Generics nicht ganz verstanden hast? Oder möchtest du vielleicht dein Problem nochmal näher beschreiben. Musst doch einen konkreten Anwendungsfall haben.

    Gruß Talla



  • Natürlich hat er alles verstanden und seine Frage ist auch absolut sinnvoll und berechtigt. Wollt ihr mich veraschen?

    class Basisklasse {
    }
    
    class Derivat<T> where T : IFooBarBaz {
    }
    

    Wie ihr seht sind da jetzt eine gewöhnliche klasse und eine generische Klasse mit einer einschränkung auf ein bestimmtes Interface. Die Klasse soll aber von der Klasse "Basisklasse" abgeleitet sein. Wie sieht dazu die korekte Syntax aus?

    Wäre Derivat kein Generic sähe es so aus:

    class Basisklasse {
    }
    
    class Derivat : Basisklasse {
    }
    


  • Talla schrieb:

    Meiner Meinung nach müsste ja die Basisklasse auch schon ne Collection sein,

    Warum? Total schwachsinnige annahme.

    und dann müsstest du dort IComparable implementieren. Wenn die Basisklasse keine Collection ist, was macht es dann für einen Sinn, eine Collection davon abzuleiten? (Keine direkte Kritik, nur als Verständnisfrage)

    Aber vollkomme unnütz, da es nicht im entferntesten mit der Frage zu tun hat. Es geht nur und ausschließlich um die Syntax. Ob eine entsprechende Hierarchie sinn macht kann man immernoch klären.



  • ich hoffe, ich habe es richtig verstanden:

    public class ObjectList<ItemType> : CollectionBase 
      where ItemType : ISerializable
    { ... }
    

    Quelle: http://www.ondotnet.com/pub/a/dotnet/2004/04/12/csharpwhidbeypt2.html



  • danke abbes, mir gings nur um die syntax, vieleicht hätte ich das hinzu schreiben sollen.

    Meiner Meinung nach müsste ja die Basisklasse auch schon ne Collection sein,

    in der java-api machen die es ja genau so,

    java.awt.Component
        |    java.awt.Button
        |    java.awt.Container
                 |    javax.swing.JComponent
                           |     javax.swing.JButton
    

    auch ein wenig komisch, einem java.awt.Component nicht gleich ein Container zu machen, sondern erst nachträglich diese Eigentschaft hinzufügen.



  • Das ist nicht komisch, es kann ganz einfach nicht jedes native Widget ein anderes aufnehmen. Bei selbst gezeichneten Komponenten geht das, deshalb ist auch jedes Swing-Widget ein Container. Wohlgemerkt jedes Swing-Widget, jedes JComponent (die oberste Basisklassen aller Swing-Komponenten), ist ein Container.
    Naja und außerdem sehe ich die Parallelen auch nicht. 😕

    Helium schrieb:

    Wollt ihr mich veraschen

    Naja, was habe ich (da ich der einzige weitere bin, der bisher geantwortet hatte) denn böses gesagt? Ich konnte leider mit der Formulierung "einer Kindklasse eine Generic verpassen" nicht wahnsinnig viel anfangen. Insgeheim habe ich zwar anhand der Codestücke vermutet, dass es um diese Problematik geht, aber so richtig klar war das für die meisten hier wohl nicht. Die Frage mag ja sinnvoll sein, aber sinnvoll gestellt war sie nicht. Und selbst wenn die Frage vielleicht mit Raten verständlich war, es ist ja sicher nicht zu viel verlangt, das ordentlich zu formulieren. Bei einem komplexeren Problem gibt sich der Antwortende u.U. viel Mühe und dann war etwas anderes gemeint.



  • ja tut mir leid, ich hätt ein wenig besser formulieren können.

    die Parallelen sind, dass erst nachträglich die Eigenschaft eines Kontainers hinzugefügt wurde, anstatt sie gleich in der Basisklasse java.awt.Component zur verfügung zu stellen.


Anmelden zum Antworten