2015-07-06 22 views

risposta

4

Un modulo (.bas) ha metodi e variabili che possono essere utilizzati globalmente nel programma e c'è solo una singola istanza dei dati (simile a un metodo o campo statico in C#). Un Class Module (.cls) ha proprietà e metodi a cui solitamente è possibile accedere solo quando l'oggetto viene istanziato, ma può avere più copie, ognuna con dati diversi.

Da MSDN: Visual Basic Concepts:

Classi differiscono dai moduli standard nel modo loro dati sono memorizzati. Non c'è mai più di una copia dei dati di un modulo standard. Questo significa che quando una parte del programma cambia una variabile pubblica in un modulo standard e un'altra parte del programma legge successivamente la variabile , otterrà lo stesso valore.

I dati del modulo di classe, d'altro canto, esistono separatamente per ciascuna istanza della classe .

E da Devx.com: Class Module(.cls) vs. Module(.bas):

Decidere tra un modulo standard e un modulo di classe non è una decisione in base alle prestazioni, ma uno del disegno. La differenza principale tra i due è nel modo in cui gestiscono i dati. Un modulo standard memorizza solo una copia dei dati. Un modulo di classe incapsula i dati all'interno di ciascuna istanza della classe. Cioè, per ogni istanza della classe , i dati esistono separatamente.

L'altra differenza principale è l'ambito di variabili e procedure all'interno del modulo. In generale, tutte le variabili e le procedure dichiarate come Pubblico all'interno di un modulo standard sono visibili in qualsiasi punto del progetto o programmi esterni se il modulo standard si trova in un componente. Le variabili e le procedure dichiarate come Pubblico all'interno di un modulo di classe possono essere visibili solo attraverso un riferimento a un'istanza del modulo di classe.

La durata dei dati e delle procedure memorizzate all'interno di un modulo è interessata da in base al quale viene utilizzato il tipo di modulo. La durata dei dati e le procedure in un modulo di classe sono definite dalla durata dell'oggetto. Quindi i dati e le procedure sono disponibili solo se esiste un riferimento all'oggetto . I dati e le procedure dichiarate all'interno dei moduli standard sono disponibili per tutta la durata del programma.

Quindi, per rispondere alla tua domanda, se si sta scrivendo una funzione che si desidera a disposizione per tutta la durata del programma e visibile a tutto il codice dell'applicazione, quindi inserire la funzione all'interno di un modulo standard .

0

Se il codice è necessario per la durata del programma ed è visibile a tutto il codice nell'applicazione, posizionare la funzione all'interno di un modulo standard.

Un modulo standard memorizza solo una copia dei dati. Un modulo di classe incapsula i dati all'interno di ciascuna istanza della classe. Cioè, per ogni istanza della classe, i dati esistono separatamente.

In generale, tutte le variabili e le procedure dichiarate come Pubblico all'interno di un modulo standard sono visibili in qualsiasi punto del progetto. Le variabili e le procedure dichiarate come pubbliche all'interno di un modulo di classe possono essere viste solo attraverso un riferimento a un'istanza del modulo di classe.

La durata dei dati e delle procedure memorizzate all'interno di un modulo dipende dal tipo di modulo utilizzato. La durata dei dati e delle procedure in un modulo di classe è definita dalla durata dell'oggetto. Quindi i dati e le procedure sono disponibili solo se esiste un riferimento all'oggetto. I dati e le procedure dichiarate all'interno dei moduli standard sono disponibili per tutta la durata del programma.

+1

Diventa un po 'più complicato dal momento che devi prendere in considerazione TLS nei server multithreaded (EXE ActiveX), in cui ogni thread ha la propria copia di qualsiasi dato nei moduli standard. – Bob77

+1

Anche le classi GlobalMultiUse presenti nello spazio dei nomi globale non richiedono l'istanziazione –