VB-Rätsel

Es gibt 87 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Hi
    Ich hatte die Idee, VB-Rätsel zu machen. Hier sind ein paar Regeln, die bei Bedarf noch ergänzt werden dürfen:
    • Die Fragen sollen lösbar sein und können aus allem zum Thema VB sein (kurze Code-Fragmente sind ebenfalls erlaubt, wobei diese aber möglichst nicht kryptisch sein sollen und alle nötigen Angaben gemacht werden müssen, wie Imports)
    • Seid fair und nett zueinander, Fehler werden nicht zu einem Heruntermachen führen
    • Die Fragen sind ohne Suchmaschine zu lösen
    • Derjenige, der die Antwort als erstes postet ist der nächste Fragensteller oder darf bestimmen, wer als nächstes frägt
      --> Ausnahme: Wenn nach 2 Tagen keine weitere Frage gestellt wurde, darf der, der als erstes postet, eine neue Frage stellen!
    • Nach 5 Tagen ohne Lösung wird diese spätestens preisgegeben
    • Weder die IDE, noch der Compiler dürfen verwendet werden, die Lösung soll möglichst Verknüpfen von Problemstellung mit Wissen oder halt allgemeines Wissen sein
    • Es sollte nur eine einzige Frage gestellt werden, damit auch nur eine einzige Person als erstes die richtige Antwort liefert


    Ich hoffe, dass sich einige an diesem Experiment beteiligen werden. Der Sinn ist, dass die Leute, die sich daran beteiligen möglichst viel Grundwissen vermittelt bekommen. Aber postet bitte nicht hier, wenn ihr nicht wisst, wozu ein Schnipsel gerade gut ist oder so.

    Hier ist meine Frage:
    Wozu und wie verwendet man generische Typen?


    Gruß
    ~blaze~

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „~blaze~“ ()

    Einem generischen Type, kann ein Datentype übergeben werden, wodurch sich dieser Type entsprechend an diesen Anpasst/Verhält.
    Beispiel:

    VB.NET-Quellcode

    1. Dim lst As List(Of Datentype)

    Hoffe erstens, dass ich richtig liege, zweitens dass das genug ist und drittens, dass ich Gewinne :P
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Als zusätzliche Regel hätte ich noch, dass man weder IDE noch Compiler verwenden darf...

    Erstes war nicht VB-Spezifisch (hatte außerdem zuerst was anderes vor, mittendrinne geändert und dann wäre der Sinn wieder weg)...
    Also Zweiter Anlauf:

    Wie kann man eine 32 Bit Zahl am einfachsten in zwei 16 Bit Zahlen speichern und entsprechend aus diesen wieder laden?

    P.S.: Einer meiner letzten Posts in diesem Forum
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

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

    @jvbsl: War jetzt Int16.TryParse() gemeint?

    In diesem Fall wäre Int16.TryParse(Die32BitZahl) möglich und zum Umdrehen Int32.TryParse(Die16BitZahl).
    Allerdings gehen dabei möglicherweiße Informationen verloren. Dann wird's schon schwerer.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Achso, ja. Hab vergessen dass ich TryParse() schon mal probiert hab.

    ...

    Nach reichlichem Überlegen bin ich zum Schluss gekommen, dass mein Gehirn um Halb 2 Nachts nicht die volle Rechenleistung bringt.

    Vielleicht nächstes Mal...
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Meinst du:

    VB.NET-Quellcode

    1. Dim short1 As Short
    2. Dim short2 As Short
    3. Dim int As Integer = 123456
    4. short1 = int And &HFFFF
    5. short2 = Cshort(int And &HFFFF0000 >> 16)
    6. int = short1 Or Cint(short2) << 16


    Wobei das &HFFFF0000 nicht erforderlich ist, da das automatisch weggeschnitten wird.

    Edit: Oder

    VB.NET-Quellcode

    1. Dim int As Integer
    2. Dim short1 As Short
    3. Dim short2 As Short
    4. short1 = System.Runtime.InteropServices.Marshal.ReadInt16(int, 0)
    5. short2 = System.Runtime.InteropServices.Marshal.ReadInt16(int, 2)


    und zum Laden selbiges wie oben.
    Edit2: Fehler ausgebessert (ReadShort->Int16)

    Gruß
    ~blaze~

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

    Hmm im erklären war ich noch nie gut, aber ich versuchs:

    Bei der Vererbung übernimmt eine Klasse alles aus einer anderen Klasse(Eigenschaften, Variablen, Mehtoden, Funktionen...) zusätzlich können noch andere Sachen eingefügt werden, welche beim Ursprünglichen nicht vorhanden sind, aber nur für dieses Objekt benötigt wird<-OMG bin ich schlecht...xD

    Mit Polymorphie ists schon schwieriger, das ist glaube ich auch bei der Vererbung, wenn du etwas erbst, jedoch bei zwei Klassen zwei verschiedene Dinge mit derselben Methode ausführen lässt, der Aufruf von außen ist aber im Endeffekt - unabhängig vom Datentype - genau derselbe...
    ^ bin mir da überhaupt nicht sicher^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    ~blaze~ schrieb:

    Bei der Polymorphie musst du noch mal ein bisschen lernen. ;)

    Als Biologe würde ich einfach mal sagen, dass das eine Eigenschaft ist, die es einem Individuum (Variable?) ermöglich mehrere Gestalten (Typen?) aufzuweisen. z.B. Raupe/Schmetterling.

    Aber wayne, ich hab nie wieder Bio in meinem Leben. :)
    Von meinem iPhone gesendet
    Hey,

    hier mal mein Erklärungsversuch zum Thema Polymorphie (auch wenn Erklären nicht meine größte Stärke ist :D): Polymorphie heißt, dass ein Objekt (= eine Klasseninstanz) in mehreren Gestalten auftreten kann (wie der Name schon sagt: "Poly-morphie" = "Viel-Gestaltigkeit"). Das heißt, eine Klasseninstanz kann über eine Referenz der Superklasse (bzw. derer Superklasse, etc.) und jedes implementierten Interfaces verwaltet werden. Dabei stehen jeweils nur die Member des Typs, von dem die Referenz ist, zur Verfügung.
    Beispiel:

    VB.NET-Quellcode

    1. Public Class A
    2. Public Sub a()
    3. End Sub
    4. End Class
    5. Public Class B
    6. Inherits A
    7. Implements C
    8. Public Sub b()
    9. End Sub
    10. Public Sub c() Implements C.c
    11. End Sub
    12. End Class
    13. Public Interface C
    14. Sub c()
    15. End Interface
    16. Module Program1
    17. Sub Main()
    18. Dim b1 As New B()
    19. 'geht
    20. Dim a1 As A = b1
    21. 'geht auch
    22. Dim c1 As C = b1
    23. 'geht alles
    24. b1.a()
    25. b1.b()
    26. b1.c()
    27. 'geht auch
    28. c1.c()
    29. 'geht nicht
    30. c1.b()
    31. 'geht nicht
    32. a1.b()
    33. End Sub
    34. End Module


    Hoffe mal, das stimmt halbwegs...



    MfG
    Turtle10
    Stimmt so ziemlich. jvbsl hat das mit der Vererbung auch ganz gut dargestellt, auch wenn er einen Teil vergessen hat (mit der Überschreibbarkeit). Das ist jetzt dumm, weil zwei verschiedene Personen die Antwort gegeben haben. Okay, da übernehm ich das mal in die Regeln. Sorry, aber wer von euch beiden als erstes schreibt, ist dran.

    Edit: Habs übernommen.

    Gruß
    ~blaze~
    Ich will hier auch nochmal einen Erklärungsversuch zur Polymorphie beitragen.

    Nehmen wir beispielhaft die Klassen Figur, Rechteck und Kreis.

    Rechteck und Kreis erben von Figur. Figur ist eine abstrakte Klasse, wenn man eine Figur erzeugt weiß das Programm erstmal nicht was sie für eine Gestalt hat.
    Man kann dem Objekt aber Kreise oder Rechtecke zuweisen, da diese beiden Klassen von der abstrakten Oberklasse abgeleitet sind.
    Ein Objekt vom Typ Figur kann also verschiedene Objekte von verschiedenen Typen enthalten, Figur ist polymorph, zu Deutsch "vielgestaltig".

    Edit: Oh, etwas zu spät. Das kommt davon wenn man im offenen Post-Fenster nachdenkt.
    Um es kurz zu machen: Polymorphie bezeichnet einfach die Möglichkeit der Mehrfachvererbung. Beispielsweise kann eine Klasse nur von einer einzigen erben (in VB inherits), die nicht nur Deklarationen, sondern auch ausgeführte Member beinhaltet. Durch das Erben von Interfaces kann eine Memberdeklaration von Eigenschaften und Methoden geboten werden. Diese enthalten aber keinen Code, sondern lediglich eine Vorgabe für die Deklaration.
    Also: Vererbung stellt Member zur Verfügung und bietet oftmals überschreibbare Methoden und Eigenschaften oder sogar (bei abstrakten Typen) Methoden und Eigenschaften, die man überschreiben muss und die in ihrer Basisklasse nicht ausgeführt wurden.
    Bei der Polymorphie kann eine Klasse von mehreren Interfaces erben, die alle abstrakte Properties und Methoden enthalten und ggf. von anderen Interfaces erben können. Dabei kann eine Klasse mehrere Interfaces implementieren. Eine Klasse kann also folgendermaßen aussehen:

    VB.NET-Quellcode

    1. Public Class MyClass
    2. Inherits MyBaseClass
    3. Implements IEnumerable, ISomething
    4. Protected Overrides Sub OnDraw(ByVal surface As Graphics)
    5. surface.DrawString(...)
    6. End Sub
    7. Public Overridable Function GetEnumerator As IEnumerator Implements IEnumerable.GetEnumerator
    8. Return New MyEnumerator(Me)
    9. End Function
    10. End Class


    Übrigens wird man benachrichtigt, wenn andere Posts drin sind!

    Gruß
    ~blaze~