Oppure

Loading
28/09/10 14:48
Marcus65

Non mi torna la possibilità di usare contemporanemente le 2 keyword overloads
e overriding.
Mi spiego: in una classe drivata tento di creare con overload una varianate di
una funzione implementata nella classe base. E sin qui tutto ok.
Ma così facendo ho, nella classe derivata entrambe le versioni del metodo:
quella ereditata dalla classe base e la variante creata con l'overloading.
Mettiamo che quella ereditata dalla classe base non mi serva: provo ad usare
overload e overriding insieme (definendo overridable la versione nella classe
base).
Ma non funge: il compilatore mi dice che non si può fare lìoverriding di una
funzione che nella classe base non esiste (e ti credo, perchè ne ho appena
modificato la firma con l'overloading !!).
Come se ne esce ?
Eppure ho letto sulla guida di totem che le 2 keyword si possono usare insieme.
Qualcuno mi può fornire indicazioni o 2 righe di codice di esempio ?
Grazie infinite

aaa
28/09/10 15:45
Il Totem
Una la dichiari Overloads Overrides e l'altra Overloads. C'è un esempio della guida, con ToString, ma non riesco a trovarlo ora...
aaa
28/09/10 16:08
Marcus65
Grazie Totem.
Ho provato proprio come tu dici ma non mi riesce.
Il messaggio di errore continua ad essere lo stesso: non si puo fare l'override di una function con firma diversa.
Provo a postare un codice di esempio di ciò che vorrei fare: nella classe base la funzione non ha parametri e si limita ad eseguire la somma x+y. Nella classe derivata ha il parametro z e esegue la somma x+y+z.
Avrò commesso un errore pacchiano. Che tuttavia non trovo....

Module Module1
    Class Base
        Protected x, y As Int32
        'Anche aggiungendo "Overridable" alla function sottostante non cambia nulla
        Public Overloads Function Prova() As Int32
            Return x + y
        End Function
    End Class
    Class Deriv
        Inherits Base
        Public Overloads Overrides Function Prova(ByVal z As Int32) As Int32
            Return x + y + z
        End Function
    End Class
    Sub Main()

    End Sub

End Module



aaa
28/09/10 16:41
Il Totem
Certo, questo mi sembra ovvio. Tu hai detto di voler eseguire l'overloading si un membro in override, ossia definire una variante di un membro già modificato con polimorfismo. L'overloading presuppone almeno due metodi con nome uguale, signature diversa, ma nella stessa classe. Quello che vuoi fare tu si chiama shadowing. Usa Shadow al posto di Overloads Overrides:
Public Shadows Function Prova(ByVal z As Int32) As Int32
aaa