NEW
Object = NEW Class [ ( Constructor parameters... ) ] [ AS Name ]
Istanzia la classe
Class.
Se viene specificato
Name, il nuovo oggetto sarà in grado di generare eventi chiamando una procedura pubblica o una funzione nel suo "parent".
-
Questo parent (genitore), o osservatore di eventi predefinito, è l'oggetto o la classe in cui il nuovo oggetto viene istanziato.
-
Il nome di questo gestore di eventi è il nome dell'oggetto seguito da un trattino basso (sottolineatura) e il nome dell'evento.
Se ti dimentichi di specificare la parte Name, il tuo oggetto non genererà mai eventi!
NEW
non è un operatore. Puoi usarlo solo all'interno di un'assegnazione.
Ma in alternativa puoi usare la funzione
Object.New.
Gestori di eventi comuni
Due oggetti diversi possono avere lo stesso nome di evento. Pertanto, è possibile gestire gli eventi di più oggetti nella stessa procedura di evento, a condizione che questi oggetti generino gli stessi eventi.
Questa funzionalità viene utilizzata dall'IDE per implementare la proprietà Group
.
Istanziazione dei form (componenti della GUI)
La classe Form è per impostazione predefinita il proprio osservatore di eventi, utilizzando il nome dell'evento
Form
. Questo è ciò che ti permette di scrivere
Public Sub Form_Open()
Print "Sono qui"
End
all'interno del file di classe di un form per intercettare eventi della form stessa.
Se crei un'istanza di una form utilizzando la sintassi
New MyForm As Name
, ciò non accadrà più. La form verrà collegata all'oggetto
corrente e, in particolare, poiché ogni oggetto può avere al massimo un osservatore di eventi predefinito,
non sarà collegata a se stessa.
Pertanto il gestore di eventi Form_Open() nel codice della form non verrà più chiamato. Se vuoi che più classi ricevano eventi da un singolo oggetto,
usa la classe
Observer.
Esempi
hButton = NEW Button(ME) AS "MyButton"
...
PUBLIC PROCEDURE MyButton_Click()
PRINT "My button was clicked !"
END
' Questo esempio crea 9*9*9 piccole caselle di testo a cui è possibile accedere tramite l'array
' pubblica Object[] nominata objIsImpossible
PUBLIC bIsInitialised AS Boolean
PUBLIC objIsImpossible AS Object[]
PUBLIC SUB Form_Open()
DIM iR AS Integer
DIM iR2 AS Integer
DIM iC AS Integer
DIM iC2 AS Integer
DIM iDigit AS Integer
DIM iX AS Integer
DIM objTextBox AS TextBox
IF NOT bIsInitialised THEN
objIsImpossible = NEW Object[] ' Occorre creare l\'array
iX = 0
FOR iR = 0 TO 8
FOR iC = 0 TO 8
FOR iDigit = 0 TO 8
iR2 = iDigit MOD 3
iC2 = iDigit / 3
objTextBox = NEW TextBox(ME) ' crea le successive 9*9*9 TextBox
objTextBox.X = (iR * 3 + iR2) * 12 + 2
objTextBox.y = (iC * 3 + iC2) * 12 + 2
objTextBox.Width = 10
objTextBox.Height = 10
objIsImpossible.Add(objTextBox, iX)
iX = iX + 1
NEXT ' iDigit
NEXT ' iC
NEXT ' iR
ENDIF
END
Istanziazione dinamica
Object = NEW ( ClassName [ , Constructor parameters... ] ) [ AS Name ]
Questa seconda sintassi consente di specificare dinamicamente il nome della classe come una stringa.
Examples
' Questo crea una matrice 3x3 di float.
DIM MyArray AS NEW Float[3, 3]
' E anche questo
DIM MyArray AS Object
DIM MyClassName AS String
MyClassName = "Float[]"
MyArray = NEW (MyClassName, 3, 3)
Vedi anche