Structure vs Class

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Bartosz.

    Structure vs Class

    Hallo & moin moin

    Bin gerade wieder beim "üben" und auf das Thema Structure & Class gestoßen.

    Nun habe ich mir folgendes zusammengestellt und vielleicht kann mir einer erklären wo denn die genauen Unterschiede sind und wann welche Form einzusetzen ist. ;)
    Aus der Literatur im Web werde ich nicht so richtig schlau.
    Danke

    VB.NET-Quellcode

    1. Module Uebung
    2. Class CVars
    3. Public x As Integer
    4. Public y As Integer
    5. End Class
    6. Private Function calc_CVArs() As Integer
    7. Dim cl As New CVars
    8. cl.x = 10
    9. cl.y = 20
    10. Dim sum As Integer = cl.x + cl.y
    11. Return sum
    12. End Function
    13. Structure SVars
    14. Public x As Integer
    15. Public y As Integer
    16. End Structure
    17. Private Function calc_SVArs() As Integer
    18. Dim st As New SVars
    19. st.x = 10
    20. st.y = 20
    21. Dim sum As Integer = st.x + st.y
    22. Return sum
    23. End Function
    24. End Module
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Ich erklär nicht, sondern ich sach mal: Erkenne selber die Unterschiede, indem Du bei Class und Structure bei

    VB.NET-Quellcode

    1. Public x As Integer
    2. Public y As Integer
    je aus dem Public ein Dim machst. Und als 2. Schritt die Zeilen Dim cl As New CVars und Dim st As New SVars in Dim cl As CVars = Nothing und Dim st As SVars = Nothing änderst. Dann siehst Du schon mal wesentliche Unterschiede selbst.
    Dann kommt noch hinzu, dass eine Class von einer anderen Class erben kann, bei Structure geht das nicht.
    Und zweifellos noch viele andere Details.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    OK; bei der Class kann ich nun nicht mehr zugreifen, zumindest nicht so weil x & y nun Privat sind, hingegen bei der Stucture bleibt das gleich.
    Also gibt es in Sturcture keine Private / Public?

    Das mit dem = Nothing bring mir nur Fehler: " End of " erwartet.???
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Also gibt es in Sturcture keine Private / Public?
    Nein, da schlussfolgerst Du falsch. Dim wird in einer Class mit Private gleichgesetzt, aber in einer Structure mit Public. Wenn Du aber explizit in Class oder Structure Private oder Public schreibst, wird das als solches auch übernommen.
    Wo taucht da bitte ne End Of-Meldung auf, wenn Du schreibst: Dim st As SVars = Nothing?

    Und: Wenn Du jemandem antwortest, der direkt vor Dir gepostet hat, lass das bitte mit der Anredefunktion, als dieses @VaporiZed. Diese Funktion ist für Fälle gedacht/vorgesehen, in denen Du jemandem antworten willst, zwischen dessen Antwort schon andere geschrieben haben, damit allen Lesenden klar ist, wem Du antwortest. Ich zumindest empfinde es als überflüssig/störend, mich quasi doppelt anzufunken. Durch Deine Antwort allein werde ich bereits darüber informiert, dass es News für mich gibt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    @Amelie Intern wird auf eine Klasse mit einem Pointer (=Zeiger) zugegriffen. Das heißt, wenn wird eine Instanzvariable MeineInstanzA einer Instanzvariablen MeineInstanzB zugewiesen, so zeigt MeineInstanzB auf dieselbe Adresse im Speicher. Mit allen Vor- und Nachteilen.

    Außerdem bedeutet Pointerzugriff, dass der Wert Nothing (in anderen Sprachen NULL) sein kann. Stimmt ja auch, eine Klasse kann Nothing sein.



    Eine Variable MyStruct enthält immer die Werte.

    VB.NET-Quellcode

    1. Structure test
    2. Public A as Integer
    3. End Structure
    4. Dim x as test

    dann schreibst du ja x.A = 42

    Eine Instanz einer Klasse musst du erst mit New initialisieren. Sonst ist sie NULL.