Buona sera a tutti
Ho una domanda di "logica di programmazione"...per Voi, probabilmente banale...
Cerco di spiegarmi con un esempio pratico.
Devo realizzare un software che esegue la registrazione dell'audio ricevuto dalla scheda audio.
Le modalità di registrazione sono due: la prima, che avvia la registrazione quando sente segnale in ingresso e la seconda che avvia/ferma la registrazione in base a dei segnali ricevuti dalla seriale.
L'idea, quindi, era quella di realizzare un'interfaccia che definisse proprietà, metodi ed eventi generici per entrambe le classi "VoxRecorder" e "ComRecorder" e avere poi un "GestoreRegistratori" con il compito di avviare, gestire, fermare i diversi registratori configurati utilizzando la classe-base di tipo interfaccia.
Ora però, nel metodo "Avvia" delle due classi registratore mi trovo a dover passare parametri diversi.
Quello che ho fatto io, è stato definire nell'interfaccia i due diversi metodi con l'istruzione "Overloads" e, nelle due classi registratori, implementare solo il metodo appropriato per quella classe.
Il """problema""" è che quando dal "GestoreRegistratori" chiamo il metodo "Avvia" per un nuovo oggetto di tipo interfaccia, mi vengono (ovviamente) proposti entrambi i metodi con il rischio che venga richiamato il metodo sbagliato se uno non conosce le classi che ereditano quell'interfaccia.
Ovviamente, essendo io a conoscenza di questo fatto, non posso sbagliare...ma mi chiedo...questo è il metodo corretto di lavorare? Oppure l'override dovrebbe essere fatto all'interno della classe che eredita l'interfaccia? Ma come si fa in tal caso?
Spero di essere riuscito a farmi capire Grazie
codice:
Public Interface IRecorder
'Avvio del servizio pr VoxRecorder
Overloads Function AvviaServizio(Configurazione As config, P as String) As Boolean
'Avvio del servizio per ComRecorder
Overloads Function AvviaServizio(Configurazione As config) As Boolean
End interface
codice:
Public Class ComRecorder
Implements IRecorder
'Inizializzazione del servizio di registrazione
Public Function AvviaServizio(Cfg As config) As Boolean Implements IRecorder.AvviaServizio
--
--
--
End Funcion
End Class
codice:
Public Class VoxRecorder
Implements IRecorder
'Inizializzazione del servizio di registrazione
Public Function AvviaServizio(Cfg As config, Par as String) As Boolean Implements IRecorder.AvviaServizio
--
--
--
End Funcion
End Class
codice:
Public Class GestoreRegistratori
Public Sub New(RecList())
For i as Integer=0 to RecList.Length -1
Dim rcd as new iRecorder
If RecList(i).Type="ComRecorder" then
rcd=new ComRecorder
rcd.Avvia(cfg)
Else
rcd=new ComRecorder
rcd.Avvia(cfg, "Prova")
End If
Next
End Sub
End Class