Visualizzazione dei risultati da 1 a 4 su 4

Hybrid View

  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

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    54
    Mi sono accorto solo ora, che, in questo modo, Visual Studio da errore e pretende che le classi "VoxRecorder" e "ComRecorder" implementino entrambi i metodi "AvviaServizio"
    Come si può fare quindi?
    Grazie

  3. #3
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,287
    Puoi fare la new dell'oggetto e poi trattarla come intefaccia.

    Qualcosa come
    dim pippo = new classe
    classe.parametri = blablabla

    E quando lo devi usare

    dim oggetto = TryCast(pippo, IRecorder)
    oggetto.Avvia(configurazione)

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    54
    Grazie della risposta
    Si, per ovviare al problema, posso anche passare i parametri (diversi) nel New delle diverse classi
    Mi interessava però migliorare i miei metodi di programmazione e capire meglio il funzionamento di interfacce e overload

    Grazie

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.