Global Class: dove la dichiaro?

di il
16 risposte

Global Class: dove la dichiaro?

Ciao,
ho bisogno di dichiarare una classe globale, cioè la vorrei inizializzare all'avvio del programma.

Ho provato a dichiararla all'inizio dell'editor di VisualStudio come segue:
Imports System.IO
Public myP As New ClasseFL
Private Sub Button1_Click...
.......
ma come errore mi dice:"L'istruzione non è valida in uno spazio dei nomi."

Per cui, dove la posso dichiarare ed inizializzare perché sia "viva" fino a chiusura dell'applicazione ?

16 Risposte

  • Re: Global Class: dove la dichiaro?

    Le classi non si inizializzano e non ha senso parlare di classe globale.

    Devi parlare di oggetti (myP è un oggeto) di una certa classe e spiegare cosa devi fare con quell'oggetto.

    Non puoi scrivere codice dopo la Imports fuori da un'altra classe/modulo.

    Forse non stai ragionando in termini di OOP.
  • Re: Global Class: dove la dichiaro?

    Ciao,
    mi spiego meglio.
    La classe la ho creata con VisualStudio


    ed adesso ho bisogno di inizializzare un oggetto (MyP) e che venga visto da tutti i Form e qualunque Classe (insomma, ovunque nel corso del programma).

    Spero di essermi spiegato, altrimenti riprovo a spiegarmi nuovamente.
  • Re: Global Class: dove la dichiaro?

    Ho provato a inizializzare myP al momento del caricamento dell'avvio di Form1 come segue:
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    	Dim myP As New ClasseFL
    End Sub
    e poi provare a impostare un suo membro:
    	...
    	Private Sub FlightLogTable_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles FlightLogTable.MouseDoubleClick
    		myP.  <-- qua non mi vede i suoi membri
    	End Sub
    End Class
    Che errore di ragionamento faccio ? Non posso avere un oggetto che sia visibile ovunque a tutti nel mio programma ?
  • Re: Global Class: dove la dichiaro?

    Forse devo semplicemente utilizzare un MODULO ?
    Invece di Classe ClasseFL uso un modulo:
    Public Module ClasseFL
       Public aio As String
    End Module
    
    Private Sub FlightLogTable_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles FlightLogTable.MouseDoubleClick
    	ClasseFL.aio = "TEST-abc"
    	Console.WriteLine(ClasseFL.aio)
    
    Così in effetti funziona..
    E' giusto il mio ragionamento di usare i moduli, o vi è un altro modo più corretto ?
  • Re: Global Class: dove la dichiaro?

    Con un modulo non puoi parlare più di classe e oggetto ma solo di variabili globali e anche se puoi, l'uso di variabili globali non è consigliato, in generale, specialmente nella programmazione OOP.
  • Re: Global Class: dove la dichiaro?

    Per cui non rimane che un file su hard-disk.
    Ma io non voglio, per cui come procederesti per avere un oggetto che viene visto ovunque ?
  • Re: Global Class: dove la dichiaro?

    Probabilmente non è necessario.

    Bisogna vedere perché vuoi utilizzarlo.
  • Re: Global Class: dove la dichiaro?

    Dalla tua risposta desumo che non sia possibile usare un oggetto a livello globale..
  • Re: Global Class: dove la dichiaro?

    Va benissimo usare il modulo con la classe e le sue istanze. L'importante è informarsi per bene su cosa vai incontro, è uno degli argomenti più dibattuti quindi non faticherai a informarti. Siccome rischi di fare cappellate serie, solitamente si dice che le variabili globali siano sbagliate a prescindere nella OOP. Io sono abbastanza neutrale sull'argomento
  • Re: Global Class: dove la dichiaro?

    Tutta la roba pubblica aumenta l'accoppiamento e questo è contro tutti i principi della robusta programmazione.

    Quasi sempre dipende dalla difficoltà di programmare usando i principi della OOP abbandonandosi alla programmazione piatta anni 80(spaghetti code) in cui tutto vede tutto. Se hai un modulo pubblico tanto vale non usare OOP perché ne abuserai sicuramente
  • Re: Global Class: dove la dichiaro?

    Per cui è un problema di sicurezza a livello di codice, cioè che posso fare errori nel programmare. Non sicurezza che altri programmi /applicazioni Windows esterni al mio programma ne modificano i valori..
    Essendo l'unico modulo in tutto il programma è lecito utilizzarlo facilitandomi la programmazione, a mio rischio e pericolo di errori nel programmare.

    Si, in effetti provengo dai cosiddetti spaghetti code degli anni ottanta.. sono un vecchietto
  • Re: Global Class: dove la dichiaro?

    Ecco ... vedi ... sicuramente provieni da COBOL/BASIC e stai riducendo la programmazione OOP a una piatta programmazione spaghetti code.

    Anni di progresso in questo campo per tornare indietro?
  • Re: Global Class: dove la dichiaro?

    Vero.
    Infatti ho riscritto il piccolo pezzo del mio programma utilizzando la OOP

    Ecco cosa ho fatto: ho dichiarato ed inizializzata nel Form1 una classe e un ArrayList (che viene utilizzato dalla classe)
    Public Class Form1 ' Console.WriteLine("Testo")
    	Dim IlFlightLog As New C_FlightLog
    	Dim LaRoute As New ArrayList
    ...
    
    Poi le Funzioni ed i Metodi ecc. utilizzano la Classe che, essendo pubblica per Form1, sarà sempre visibile a tutti i suoi eredi di Form1.
    Tanto se chiudo questa Form, significa che il programma viene chiuso per cui...facilito la vita anche a Garbage !

    Comunque, messo alla prova il programmino e: ovviamente funziona: la ListView va che è una meraviglia

    Spero di essere nel forum giusto e possa continuare con altri topic in caso di bisogno (che sicuramente avrò visto la mia decade passata da mo' che non programmavo più).


    Ecco ... vedi ... sicuramente provieni da COBOL/BASIC e stai riducendo la programmazione OOP a una piatta programmazione spaghetti code.
    In progressione temporale:
    1) Assembler (in Motorola 680x20).. codici e codici in assembly ! Lo Spaghetti Code ! Si... QUA ho programmato tanto, ma tanto !!!!!
    Cappero quanto ci ho programmato ! Bei miei tempi A ripensarci era propio bello tutto, non solo programmare !
    2) Invece superficialmente: C, C++ (programmato poco in OOP)
    3) buco temporale immenso
    4) Visual Basic, Gambas, Objective-C (letto solo il libro e la versione 1.0 eheh ora mi pare usino Swit eheh !)
    5) ultra buco temporale da buco nero gravitazionale maxi
    6) ora qua..


    Tranquillo fratello (ironicamente parlando, ok?), anche se il tempo libero non è mio amico ultimamente, piano piano mi riallineo ai nuovi linguaggi. Sono o non sono un vecchio programmatore in LM ?!! ()
    SIAMO LA RIVOLUTION !!
  • Re: Global Class: dove la dichiaro?

    Beh, la famiglia 68000 era veramente avanzata dato che ho lavorato parecchi anni con il "piccolo" 6502 ...

    Quindi, non mi dici nulla di nuovo. Ma l'assembly è un'altra storia.

    Qui di parla di OOP e fai bene a cercare di tenerti aggiornato ... fratello ...
Devi accedere o registrarti per scrivere nel forum
16 risposte