Konstruktor mit Parameter welches ISunflower hält

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Eistee.

    Konstruktor mit Parameter welches ISunflower hält

    Hi, ich hab versucht den Titel kurz zu halten, aber irgendwie sieht es komisch aus :rolleyes:

    Worum es mir geht: Ist es möglich in einen Konstruktor zu erstellen, der ein Objekt oder eine Ref vom Typ X, Y oder Z (...) erwartet, welche unbedingt die Schnittstelle ISunflower implementiert hat?

    Also wenn der übergebene Typ nicht ISunflower implementiert hat, erkennt die IDE dies und meckert.
    Also der Typ müsste dann ja Variabel sein und zudem muss ISunflower implementiert worden sein.

    Geht das irgendwie? :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eistee“ ()

    Einfach anstatt Typ X,Y,Z als Typ des Parameters verwenden.
    Sub New(ByVal param As ISunFlower) ...

    Alternativ kannst du auch mit Generika arbeiten(was hier aber nicht notwendig ist, da du nur ein Interface hast). Wenn der Typ unbedingt mehrere Interfaces haben soll kannst du folgendes machen:

    Quellcode

    1. Public Class Klasse(Of T As {ISunFlower, ISunFlower1})
    2. Sub New(ByVal param As T) ...
    3. End Class


    In diesem Fall könntest du aber auch die erste Methode verwenden indem du ein zusätzliches Interface erstellst:

    Quellcode

    1. Public Interface ISunFlowers
    2. Inherits ISunFlower, ISunFlower1
    3. End Interface


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „thefiloe“ ()

    Eistee schrieb:

    welche unbedingt die Schnittstelle ISunflower implementiert hat?

    Hört sich für mich danach an:

    VB.NET-Quellcode

    1. Class Bla
    2. Public New(flower as ISunFlower)
    3. ' ...
    4. End Sub
    5. End Class
    6. ' Verwendung:
    7. ' (Klasse Abc implementiert ISunflower)
    8. Dim h as ISunflower = new Abc()
    9. Dim b as New Bla(h)
    10. ' Oder
    11. Dim b as New Bla(new Abc())


    Edit:
    thefiloe hat schon nen Edit gemacht. :<
    Von meinem iPhone gesendet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nikeee13“ ()

    So ich hab es jetzt mal ausprobiert und leider funktioniert es so zumindest nicht (Fehlermeldung im Kommentar):

    VB.NET-Quellcode

    1. Interface ISunflower
    2. Property sonnenblumenkerne As Boolean
    3. Get/Set ...
    4. End
    5. Class specialSunflower : Implements ISunflower
    6. 'ISunflower zeug
    7. 'New etc.
    8. End Class
    9. Class garten
    10. _blume As ISunflower
    11. Sub New(blume As ISunflower)
    12. _blume = blume
    13. End Sub
    14. blume.sonnenblumenkerne = true
    15. End Class
    16. blume = new specialSunflower()
    17. blumenGarten = new garten(blume) 'Die beste Übereinstimmung (...) hat ungültige Argumente


    @nikeee13: Deine Ausfürung Dim b as New Bla(new Abc()), habe ich leider nicht ganz nachvollziehen können.
    Abc ist eine leere Klasse, welche ISunflower hält? Doch was ist Bla?
    Weis nicht was da jetzt die eig. Klasse "specialSunflower" wär.

    Im Endeffekt soll die Eigenschaft sonnenblumenkerne in Garten._blume immer vorhanden sein.
    "Egal" welcher Typ im Konstruktor übergeben wurde.
    Egal in Anführungszeichen, weil es nur bestimmte aber unendlich erweiterbare Typen sein sollen.
    Also wenn ich später eine Klasse dazuschreibe: ISunflower implementieren und läuft.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Eistee“ ()

    :pinch:

    Bin das ganze jetzt mal Schriff für Schritt durchgegangen, denn der eigentliche Konstruktor ist etwas vieel länger.
    Und nach dem 5x mal, ist mir aufgefallen das mitten drin ein ref gefehlt hat :cursing:
    Es geht jetzt Danke nochmal an Alle.

    Wenn die IDE die ganze Zeile unterkringelt und es keine weiteren Hinweise gibt, ist das bei schlecht formatierten Code echt blöd ^^