Strukturen
BeschreibungStructure <Name> [Extends <Name>] ... EndStructure
Structure ist nützlich, um Benutzertypen zu definieren und um Zugriff auf einige Speicherbereiche des OS zu erhalten. Strukturen können für das schnellere und einfachere Verwalten von großen Datenbeständen benutzt werden. Sie sind sehr nützlich, um mit ihrer Hilfe in einem Objekt alle zusammengehörenden Informationen gruppieren zu können. Auf die Struktur-Felder wird mit dem \ Operator zugegriffen. Strukturen können auch verschachtelt werden. Statische Arrays werden innerhalb von Strukturen unterstützt.
Dynamische Objekte wie Arrays, Listen und Maps werden innerhalb von Strukturen unterstützt und werden automatisch initialisiert, wenn das Objekt mit Hilfe der Struktur erstellt wird. Um solche Felder zu deklarieren, verwenden Sie die folgende Schlüsselwörter: Array, List und Map.
Der optionale Extends Parameter ermöglicht eine Struktur mit neuen Feldern (aus einer bereits definierten Struktur) zu erweitern. Alle in der erweiterten (nach Extends angegebenen) Struktur gefundenen Felder werden in der neu definierten Struktur verfügbar sein und werden vor den neuen Feldern platziert. Dies ist nützlich, um einfache Vererbung von Strukturen durchzuführen.
SizeOf kann bei Strukturen benutzt werden, um die Größe der Struktur zu ermitteln. OffsetOf kann verwendet werden, um den Index des angegebenen Felds zu ermitteln.
Bitte beachten Sie, dass sich in Strukturen ein statisches Array[] nicht so verhält wie das normale BASIC Array (definiert mittels Dim), um konform zum C/C++ Strukturen Format zu bleiben (was direkte API Strukturen Portierung ermöglicht). Dies bedeutet, dass a[2] ein Array von 0 bis 1 definiert, wogegen Dim a(2) ein Array von 0 bis 2 anlegt.
Bei der Verwendung vieler Strukturfelder können Sie den Umfang einzugebenden Codes vereinfachen und seine Lesbarkeit erhöhen, wenn Sie die With : EndWith Schlüsselwörter benutzen.
Es ist möglich, eine komplette Struktur zu kopieren, indem mittels des Gleichheitszeichens (=) eine Zuweisung zwischen zwei Struktur-Elementen des gleichen Typs vorgenommen wird.
ClearStructure kann verwendet werden, um einen strukturierten Speicherbereich zu löschen. Dies ist für die fortgeschrittene Anwendung gedacht, wenn Zeiger beteiligt sind.
Beispiel:
Structure Person Name.s ForName.s Age.w EndStructure Dim MyFriends.Person(100) ; Hier wird die Position '0' des Arrays MyFriend() ; eine Person und deren Informationen enthalten. MyFriends(0)\Name = "Andersson" MyFriends(0)\Forname = "Richard" MyFriends(0)\Age = 32Beispiel: Eine komplexere Struktur (verschachtelt und statisches Array)
Structure Window *NextWindow.Window ; verweist auf ein anderes Window Objekt x.w y.w Name.s[10] ; 10 Namen verfügbar (von 0 bis 9) EndStructureBeispiel: Erweiterte ("extended") Struktur
Structure MyPoint x.l y.l EndStructure Structure MyColoredPoint Extends MyPoint color.l EndStructure ColoredPoint.MyColoredPoint\x = 10 ColoredPoint.MyColoredPoint\y = 20 ColoredPoint.MyColoredPoint\color = RGB(255, 0, 0)Beispiel: Kopieren von Strukturen
Structure MyPoint x.l y.l EndStructure LeftPoint.MyPoint\x = 10 LeftPoint\y = 20 RightPoint.MyPoint = LeftPoint Debug RightPoint\x Debug RightPoint\yBeispiel: Dynamisches Objekt
Structure Person Name$ Age.l List Friends$() EndStructure John.Person John\Name$ = "John" John\Age = 23 ; Jetzt fügen wir einige Freunde zu John hinzu ; AddElement(John\Friends$()) John\Friends$() = "Jim" AddElement(John\Friends$()) John\Friends$() = "Monica" ForEach John\Friends$() Debug John\Friends$() Next
BeschreibungStructureUnion Feld1.Typ Feld2.Typ ... EndStructureUnion
StructureUnion sind nur nützlich für fortgeschrittene Programmierer, welche etwas Speicher sparen wollen, indem sie einige Felder innerhalb derselben Struktur teilen. Sie funktionieren wie das 'Union' Schlüsselwort in C/C++.
Hinweis: Jedes Feld in der StructureUnion Deklaration kann einen unterschiedlichen Typ haben.Beispiel:
Structure Type Name$ StructureUnion Long.l ; Jedes Feld (Long, Float und Byte) befindet sich Float.f ; an derselben Adresse im Speicher. Byte.b ; EndStructureUnion EndStructureBeispiel: Erweitertes Beispiel (Datums-Verwaltung)
Structure date day.s{2} pk1.s{1} month.s{2} pk2.s{1} year.s{4} EndStructure Structure date2 StructureUnion s.s{10} d.date EndStructureUnion EndStructure Dim d1.date2(5) d1(0)\s = "05.04.2008" d1(1)\s = "07.05.2009" Debug d1(0)\d\day Debug d1(0)\d\month Debug d1(0)\d\year Debug d1(1)\d\day Debug d1(1)\d\month Debug d1(1)\d\year d2.date2\s = "15.11.2010" Debug d2\d\day Debug d2\d\month Debug d2\d\year