Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Overloading e Overriding insieme
Forum - C# / VB.NET - Overloading e Overriding insieme

Avatar
Marcus65 (Normal User)
Newbie


Messaggi: 10
Iscritto: 30/08/2010

Segnala al moderatore
Postato alle 16:48
Martedì, 28/09/2010

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


PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 18:41
Martedì, 28/09/2010
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:
Codice sorgente - presumibilmente Delphi

  1. Public Shadows Function Prova(ByVal z As Int32) As Int32


PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 17:45
Martedì, 28/09/2010
Una la dichiari Overloads Overrides e l'altra Overloads. C'è un esempio della guida, con ToString, ma non riesco a trovarlo ora...

PM
Avatar
Marcus65 (Normal User)
Newbie


Messaggi: 10
Iscritto: 30/08/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 18:08
Martedì, 28/09/2010
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....

Codice sorgente - presumibilmente VB.NET

  1. Module Module1
  2.     Class Base
  3.         Protected x, y As Int32
  4.         'Anche aggiungendo "Overridable" alla function sottostante non cambia nulla
  5.         Public Overloads Function Prova() As Int32
  6.             Return x + y
  7.         End Function
  8.     End Class
  9.     Class Deriv
  10.         Inherits Base
  11.         Public Overloads Overrides Function Prova(ByVal z As Int32) As Int32
  12.             Return x + y + z
  13.         End Function
  14.     End Class
  15.     Sub Main()
  16.  
  17.     End Sub
  18.  
  19. End Module





PM