Visualizzazione dei risultati da 1 a 4 su 4

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    54

    Overload metodi interfaccia

    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
    Ultima modifica di mmjc23; 06-08-2015 a 17:55

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.