It is currently 7 March 2021, 18:48 Advanced search

chiarimento su overload di metodi (2nda puntata)

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

chiarimento su overload di metodi (2nda puntata)

Postby theguru » 18 February 2021, 18:22

Salve, vorrei segnalare questo comportamento, e capire se si tratta di un comportamento conosciuto e desiderato del framework:

- Io ho tre classi, ognuna che estende la successiva, quindi
BASE -> ESTESA -> FINALE (FINALE estende ESTESA che a sua volta estende BASE)
(tipicamente, esistono decine di FINALE diverse, poche ESTESA, una sola BASE)

- BASE ed ESTESA si trovano su un componente, FINALE è definita su un altro componente, che ovviamante dipende dal primo

- Utilizzo l'overload dei metodi, quindi dentro BASE e dentro FINALE esiste lo stesso metodo .pippo()
questo metodo viene chiamato da due procedure, una che si trova dentro BASE, una che si trova dentro ESTESA

schematizzato:
Code: Select all
BASE   .pippo()
       .procedura_base()    che chiama .pippo
-----------------------------------------------------------------
ESTESA .procedura_estesa()  che chiama .pippo
-----------------------------------------------------------------
FINALE .pippo()             overload del metodo in BASE

ora, quello che riscontro è questo:
1) se un istanza di FINALE, lancia .procedura_base(), l'overload avviene correttamente (ovvero viene eseguito il metodo .pippo() definito dentro FINALE)
2) se un istanza di FINALE, lancia .procedura_estesa(), l'overload NON avviene correttamente (ovvero viene eseguito il metodo .pippo(), tipicamante vuoto, presente nella classe BASE)
A mio avviso l'overload dovrebbe avvenire anche nel secondo caso, vorrei quindi capire se questo comportamento del framework è conosciuto o desiderato o comunque considerato OK.
Grazie!

EDIT rispetto la post PRECEDENTE:
QUI @lucabaldini mi ha gentilmente indicato di porre attenzione alla chiamata di .pippo(), controllando se è identificata come base.pippo() oppure this.pippo()
In effetti questa diversa chiamata genera un comportamento diverso, ma purtroppo non risolve il problema: in pratica, chiamando base.pippo() viene interrotto l'overload del caso 1 (ed in effetti ha senso), ma in nessun modo si può "attivare" il funzionamento dell'overload del caso 2.
Detto in altri termini this.pippo() del caso 2 si comporta come se fosse un base.pippo()

Allo stato attuale, il risultato pratico di questo comportamento è che non posso avere più di un livello di estensione di classi, oppure, se ho più di un livello, sono costretto a replicare gli eventuali metodi di overload in tutte le classi intermedie. In questo modo ci metto una pezza, ma chiedo a voi di progamma se ritenete (come me) questo sia un malfunzionamento, in modo da poterlo segnalare in assistenza.

PS: potreste tenerli sbloccati per un po' più di tempo i post?
User avatar
theguru
 
Posts: 867
Joined: 29 January 2014, 13:01

Re: chiarimento su overload di metodi (2nda puntata)

Postby lucabaldini » 26 February 2021, 11:00

No, non mi torna...

"this.pippo()" deve chiamare il metodo pippo dovunque sia definito nella catena della gerarchia... E non lo fa InDe ma lo fa .NET.

Hai un caso in cui non succede? Perché io, nell'altro thread, avevo fatto delle prove ed il caso 2 funzionava correttamente.

this.pippo() genera il codice "pippo()" e .NET chiama pippo della classe corrente, se non c'è chiama quello della classe precedente e così via fino alla radice dell'estensione. Se, invece, scrivi "base.pippo()" è InDe che "collega" il metodo alla prima classe base che ha quel metodo...

Comunque, se hai un progetto che mostra il problema ci guardo volentieri :-)
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4690
Joined: 1 October 2010, 17:03
Location: Bologna

Re: chiarimento su overload di metodi (2nda puntata)

Postby theguru » 3 March 2021, 14:07

Grazie Luca, faccio qualche prova guardando il codice generato su VSC e ti aggiorno!
User avatar
theguru
 
Posts: 867
Joined: 29 January 2014, 13:01


Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: Google [Bot] and 25 guests

cron