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 interfacecodice:Public Class ComRecorder Implements IRecorder 'Inizializzazione del servizio di registrazione Public Function AvviaServizio(Cfg As config) As Boolean Implements IRecorder.AvviaServizio -- -- -- End Funcion End Classcodice: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 Classcodice: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

Rispondi quotando