- 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?