fb:porticula NoPaste
Testfälle zu SHARED
Uploader: | MOD |
Datum/Zeit: | 25.06.2011 15:14:59 |
' Testfälle zur Vorführung des Zusammenhangs von SHARED und der Variableninitialisierung
'
' SHARED sorgt bei Variablen eines UDTs dafür, dass das Objekt viel früher erstellt wird als man denken würde.
' Ohne SHARED wird das Objekt erst mit der Deklaration erstellt und erst dann der Ctor aufgerufen.
' Mit SHARED wird der Ctor des Objekts zu Programmbeginn aufgerufen.
'
' Für Pointer spielt dieses Verhalten kaum eine Rolle, da Pointer nur Zeiger auf Daten sind und keine direkten Typen haben.
' ALLOCATE/CALLOCATE erzeugen auch kein Objekt sondern reservieren nur Speicher.
' NEW hingegen erzeugt ein Objekt, allerdings erst nachdem NEW aufgerufen wurde.
' Ob die Variable SHARED ist oder nicht spielt keine Rolle.
'
' Da die Reihenfolge des Aufrufs des Ctors nur anders ist wenn per DIM SHARED ein Objekt erzeugt wurde,
' muss auch nur hier explizit darauf geachtet werden.
#Define Testfall 1 ' 1-9 eingeben und starten
Type foo
bar As Integer
Declare Constructor ()
End Type
Constructor foo ()
Print "Ctor"
End Constructor
Sub Start1 Constructor 101
Print "Start1"
End Sub
Sub Start2 Constructor
Print "Start2"
End Sub
Print "Programmstart"
Print
#If Testfall = 1
Print "Dim As foo x1 - Ctor wird ohne SHARED hier aufgerufen"
Dim As foo x1
#ElseIf Testfall = 2
Print "Dim Shared As foo x2 - Ctor wird mit SHARED nach der ersten Ctor-Sub aufgerufen"
Dim Shared As foo x2
#ElseIf Testfall = 3
Print "Dim As foo Ptr x3 - Speicherreservierung erzeugt keinen Typen, also kein Ctor"
Dim As foo Ptr x3
Print "x3 = Allocate(SizeOf(foo))"
x3 = Allocate(SizeOf(foo))
Print "DeAllocate x3"
DeAllocate x3
#ElseIf Testfall = 4
Print "Dim Shared As foo Ptr x4 - Wie Fall 3"
Dim Shared As foo Ptr x4
Print "x4 = Allocate(SizeOf(foo))"
x4 = Allocate(SizeOf(foo))
Print "DeAllocate x4"
DeAllocate x4
#ElseIf Testfall = 5
Print "Dim As foo Ptr x5 - Wie Fall 1"
Dim As foo Ptr x5
Print "x5 = New foo"
x5 = New foo
Print "Delete x5"
Delete x5
#ElseIf Testfall = 6
Print "Dim Shared As foo Ptr x6 - Wie Fall 1"
Dim Shared As foo Ptr x6
Print "x6 = New foo"
x6 = New foo
Print "Delete x6"
Delete x6
#ElseIf Testfall = 7
Print "Var x7 = New foo - Wie Fall 5"
Var x7 = New foo
Print "Delete x7"
Delete x7
#ElseIf Testfall = 8
Print "Var Shared x8 = Cast(foo Ptr, 0) - Wie Fall 6"
Var Shared x8 = Cast(foo Ptr, 0)
Print "x8 = New foo"
x8 = New foo
Print "Delete x8"
Delete x8
#ElseIf Testfall = 9
Print "Var Shared x9 = Cast(foo, Type<foo>) - Wie Fall 2"
Var Shared x9 = Cast(foo, Type<foo>)
#EndIf
Print
Print "Programmende"
Sleep