Lista Oggetti Condivisa per tipo definito da Interfaccia

di Anonimizzato15322 il
4 risposte
Buon pomeriggio,

Vorrei sapere come aggirare il problema dell'impossibilitá di implementare proprietá in una Interface. Vi faccio un esempio semplice del problema e vi descrivo il risultato che voglio ottenere.

Definisco una interfaccia PERSONA.

Definisco due classi che implementano l'interfaccia: UOMO e DONNA. Il construttore di ogn'una di queste due classi aggiorna un ArrayList della classe. In UOMO e DONNA definisco:
Shared Uomini As ArrayList = New ArrayList
Shared Donne As ArrayList = New ArrayList
I due ArrayList immagazzinano tutte le istanze create nelle due classi.

Ora, il problema é che voglio un ArrayList condiviso che immagazzini uomini e donne come Persone, per poi accedere a tutte le istanze, siano esse uomini o donne.

Nella definizione dell'interfaccia PERSONA non lo posso fare.

Come posso aggirare il problema e ottenere il mio ArrayList globale di persone?

Grazie mille,

Daniele

4 Risposte

  • Devi creare una classe Persona e derivare da questa una classe Uomo e una classe Donna
  • In quel caso UOMO e DONNA rimarrebbero sottoclassi di PERSONA?

    Perché nell'altra parte di codice ho bisogno di gestire UOMO e DONNA richiamando le stesse Function, che peró al loro interno sono definite diversamente.

    es.

    paolo.etaBiologica(25) = 20
    francesca.etaBiologica(25) = 40

    Perdonate la battuta maschilista, ahahahah...

    L'idea é coumnque questa. Ovviamente quanto mostrato é perché ho poi bisogno di girare una routine sulle persone.

    For each person As persona In ArrayListPersoneCheNonRiescoADefinire
    person.etabiologica()... ecc
  • Dai un'occhiata e prendi spunto
    
        Public Class Strumento
            Protected valore As Decimal
            Public Overridable Sub Suona(ByVal Nota As Integer, ByVal Durata As Integer)
            End Sub
    
            Public Sub New(v As Decimal)
                valore = v
            End Sub
        End Class
    
        Public Class Violino
            Inherits Strumento
            Public Overrides Sub Suona(ByVal Nota As Integer, ByVal Durata As Integer)
                Console.WriteLine("Suona violino ... valore {0}", valore)
            End Sub
            Public Sub New(v As Decimal)
                MyBase.New(v)
            End Sub
        End Class
    
        Public Class Pianoforte
            Inherits Strumento
            Public Overrides Sub Suona(ByVal Nota As Integer, ByVal Durata As Integer)
                Console.WriteLine("Suona pianoforte ... valore {0}", valore)
            End Sub
            Public Sub New(v As Decimal)
                MyBase.New(v)
            End Sub
        End Class
    
        Sub Main()
            Dim st As List(Of Strumento) = New List(Of Strumento)
    
            st.Add(New Violino(150000))
            st.Add(New Pianoforte(2500000))
    
            st(0).Suona(10, 10)
            st(1).Suona(10, 10)
        End Sub
    
  • Perfetto,

    Grazie mille. Nei prossimi giorni modificheró il codice eliminando la definizione dell'interfaccia per sostituirla con l'ereditarietá della classe.

    Saluti,

    Daniele
Devi accedere o registrarti per scrivere nel forum
4 risposte