DICHIARARE METODI:
---------------------------


I METODI possono essere dichiarati METHOD <cMessage> = <cMethodUDF> quando un UDF è utilizzata per processare il messaggio <cMessage> o come code blocks che sono attualmente un tipo speciale di IVar, per esempio:

METHOD Display BLOCK {|self| dispbegin(),;
self:show(), self:redefine(),;
dispend() }



Questo crea un metodo ::display che non ha un <cMethodUDF> ma è processato direttamente dal code block.

Potete richiamare il metodo ::display() con fino a 10 parametri (primo parametro è sempre self, più 9 opzionali).

Nota: Quando usate BLOCK DATA o METHODS dovete far riferimento a self come primo argomento nel code block. Questo non è necessario quando si usa l'INLINE statement (vedi header file)


INLINE-BLOCK:
-------------------


Quando si dichiarano INLINE IVars, self è dichiarato automaticamente come il primo parametro del code block, così, si possono scrivere moduli, inline code riferentisi a self come ::, ad esempio:

DATA nVar AS 0
DATA cVar AS ""
DATA Test( nVal, cVal ) INLINE IF( valtype(nVal) == "N", ::NVar := nVal,), ;
IF( ValType(cVal) == "C", ::CVar := cVal, self)

Questo è tradotto in...

{|self, nVal, cVal| IF( valtype(nVal) == "N", self:NVar := nVal,), ;
IF( ValType(cVal) == "C", self:CVar := cVal,), self }


Verificate di programmane con liste di comandi separate dalla virgola. 
L'ultimo comando dovrà essere il Return Value del motodo (self è il valore di default)

Per default, gli INLINE statements restituiscono Self come precedente valore nel code block. Utilizzate la clausola NOSELF per evitare di restituire Self.



METHOD ALIASING:
------------------------


Quando si effettua l'alias di una classe si usa la clausola ALIAS amomento dell'inizializzazione della classe, tutti i metodi della classe che sono soprascritti dalle child classes sono clonati usando il nome ALIAS.
Se non usi l'alias per la classe, viene utilizzato il nome della classe. Così, il metodo oWin:display() sarà ::oWinDisplay() nella child class.
I parent methods non usano lo stesso come i metodi delle child classes che mantengono i nomi originali della partent class, per es.:

CLASS OWIN ALIAS OW // class #1 (parent)
...
...
METHOD MsClick = _oWMsClick
METHOD Display = _oWDisplay
METHOD Hide = _oWHide

ENDCLASS

CLASS DIALOG FROM OWIN // class #2 (child)
...
...
METHOD Display = _oDDisplay
METHOD Hide = _oDHide
ENDCLASS


In questo esempio la classe DIALOG ha un metodo:: display() ed un metodo ::hide() ed anche i metodi della parent class (aliased) che possono essere chiamati con ::owDisplay() e ::owHide(). Anche la child class contiene il metodo della parent class ::MsClick() con lo stesso nome della parent class.

Così, ci sono quattro modi per richiamare un parent method da una child class:

(1) usa ::super:<methodname> direttamente.

(2) usa ::super(SuperClassName):<methodName>

(3) usa l'aliased method come mostrato sopra.

(4) usa ::<SuperAlias>Super:<methodname> as ese.: ::oWSuper:Display()


Nota:
-----
Se non provvedete a fornire un ALIAS al momento dell'inizializzazione della Classe, i prim 4 caratteri del nome della classe sarà automaticamente l'alias della classe. Ad es.:

CLASS TEST1
...
CLASS TEST2 FROM TEST1

// Dovete creare l'ALIAS qui in quanto l'ALIAS per entrambe le classi //sarebbe"TEST", così sarà:

CLASS TEST1 ALIAS T1
...
CLASS TEST2 ALIAS T2 
// ... o qualcosa di simile



* non dimenticate di creare l'ALIAS per le Vostre Classi. Se lo dimentiate l'Alias della classe sarà determinato dalle prime quattro lettere della classe. Se il nome della parent class inizia con le tìstesse quattro lettere saranno guai.


                                                                                                                           

Hosted by www.Geocities.ws

1