Ci sono solo tre modi per organizzare a VB.NET applicazione.
- moduli
- strutture
- Classi
Ma la maggior parte degli articoli tecnici presume che tu ne sappia già tutto. Se sei uno dei tanti che hanno ancora qualche domanda, potresti semplicemente leggere oltre i bit confusi e provare comunque a capirlo. E se hai un lotto di tempo, puoi iniziare a cercare Microsoft documentazione:
- "Un modulo è un file eseguibile portatile, come type.dll o application.exe, costituito da una o più classi e interfacce."
- "Un'istruzione Class definisce un nuovo tipo di dati."
- "L'istruzione Structure definisce un tipo di valore composito che è possibile personalizzare."
Bene allora. Qualsiasi domanda?
Per essere un po 'più equi con Microsoft, hanno pagine e pagine (e più pagine) di informazioni su tutte queste che puoi sfogliare. E devono essere il più esatti possibile perché stabiliscono lo standard. In altre parole, la documentazione di Microsoft a volte si legge come un libro di legge perché è un libro di legge.
Ma se stai solo imparando .NET, può essere molto confuso! Devi iniziare da qualche parte. Comprendere i tre modi fondamentali per scrivere codice in VB.NET è un buon punto di partenza.
Tu puoi scrivere VB.NET codice utilizzando una di queste tre forme. In altre parole, è possibile creare un Applicazione console in VB.NET Express e scrivi:
Modulo Modulo 1
Sub Main ()
MsgBox ("Questo è un modulo!")
End Sub
Modulo finale
Classe Classe 1
Sub Main ()
MsgBox ("Questa è una classe")
End Sub
End Class
Struttura Struct1
Dim myString As String
Sub Main ()
MsgBox ("Questa è una struttura")
End Sub
End Structure
Questo non fa qualunque senso come un programma, ovviamente. Il punto è che non si ottiene un errore di sintassi, quindi è "legale" Codice VB.NET.
Queste tre forme sono l'unico modo per codificare la radice dell'ape regina di tutto .NET: l'oggetto. L'unico elemento che interrompe la simmetria delle tre forme è l'affermazione: Dim myString As String. Ciò ha a che fare con una Struttura che è un "tipo di dati composito" come afferma Microsoft nella loro definizione.
Un'altra cosa da notare è che tutti e tre i blocchi hanno un Sub Main () in loro. Uno dei principi più fondamentali di OOP è di solito chiamato incapsulamento. Questo è l'effetto "scatola nera". In altre parole, dovresti essere in grado di trattare ogni oggetto in modo indipendente e questo include l'uso di subroutine identiche se lo desideri.
Classi
Le lezioni sono il punto "giusto" per iniziare perché, come Microsoft osserva, "Una classe è un componente fondamentale della programmazione orientata agli oggetti (OOP)". In effetti, alcuni autori considerano i moduli e le strutture solo come tipi speciali di classi. Una classe è più orientata agli oggetti di un modulo perché è possibile instantiate (crea una copia di) una classe ma non un modulo.
In altre parole, puoi codificare ...
Modulo di classe pubblica 1
Sottomodulo privato1_Load (_
Mittente ByVal come sistema. Oggetto, _
ByVal e As System. EventArgs) _
Gestisce MyBase. Caricare
Dim myNewClass As Class1 = New Class1
myNewClass. ClassSub ()
End Sub
End Class
(L'istanza di classe è enfatizzata.)
Non importa se la classe stessa stessa, in questo caso, ...
Classe pubblica Class1
Sub ClassSub ()
MsgBox ("Questa è una classe")
End Sub
End Class
... è in un file da solo o fa parte dello stesso file con form1 codice. Il programma funziona esattamente allo stesso modo. (Notare che form1 è anche una classe.)
Puoi anche scrivere codice di classe che si comporta in modo molto simile a un modulo, cioè senza istanziarlo. Questo si chiama a Condivisa classe. L'articolo "Statico" (ovvero "Condiviso") rispetto ai tipi dinamici in VB.NET lo spiega in modo molto più dettagliato.
Un altro fatto sulle lezioni dovrebbe essere tenuto presente. Membri (proprietà e metodi) della classe esistono solo mentre esiste l'istanza della classe. Il nome per questo è scoping. Questo è il scopo di un'istanza di una classe è limitata. Il codice sopra può essere modificato per illustrare questo punto in questo modo:
Modulo di classe pubblica 1
Sottomodulo privato1_Load (_
Mittente ByVal come sistema. Oggetto, _
ByVal e As System. EventArgs) _
Gestisce MyBase. Caricare
Dim myNewClass As Class1 = New Class1
myNewClass. ClassSub ()
myNewClass = Nothing
myNewClass. ClassSub ()
End Sub
End Class
Quando il secondo myNewClass. ClassSub () l'istruzione viene eseguita, a NullReferenceException viene generato un errore perché il file ClassSub il membro non esiste.
moduli
In VB 6, era comune vedere programmi in cui la maggior parte del codice era in un modulo (A .BAS, file anziché, ad esempio, in a Modulo file come Form1.frm.) In VB.NET, sono presenti sia i moduli che le classi .VB File. Il motivo principale per cui i moduli sono inclusi in VB.NET è quello di offrire ai programmatori un modo per organizzare i propri sistemi inserendo il codice in luoghi diversi per mettere a punto l'ambito e l'accesso per il loro codice. (Cioè, per quanto tempo esistono i membri del modulo e quale altro codice può fare riferimento e utilizzare i membri.) A volte, potresti voler inserire il codice in moduli separati solo per semplificare il lavoro.
Tutti i moduli VB.NET sono Condivisa perché non possono essere istanziati (vedi sopra) e possono essere contrassegnati amico o Pubblico quindi è possibile accedervi all'interno dello stesso assembly o ogni volta che sono referenziati.
strutture
Le strutture sono le meno conosciute delle tre forme di oggetti. Se stessimo parlando di "animali" anziché di "oggetti", la struttura sarebbe un Aardvark.
La grande differenza tra una struttura e una classe è che una struttura è a tipo di valore e una classe è a tipo di riferimento.
Cosa significa? Sono così felice che tu l'abbia chiesto.
Un tipo di valore è un oggetto che viene archiviato direttamente in memoria. Un Numero intero è un buon esempio di un tipo di valore. Se hai dichiarato un Numero intero nel tuo programma in questo modo ...
Dim myInt as Intero = 10
... e hai controllato la posizione di memoria memorizzata myInt, troverai il valore 10. Vedi anche questo descritto come "allocato in pila".
Lo stack e l'heap sono semplicemente modi diversi di gestire l'uso della memoria del computer.
Un tipo di riferimento è un oggetto in cui la posizione dell'oggetto è memorizzata. Quindi, trovare un valore per un tipo di riferimento è sempre una ricerca in due passaggi. UN Corda è un buon esempio di un tipo di riferimento. Se hai dichiarato a Corda come questo ...
Dim myString as String = "Questo è myString"
... e hai controllato la posizione di memoria memorizzata mystring, troverai un'altra posizione di memoria (chiamata a pointer - questo modo di fare le cose è il cuore dei linguaggi in stile C). Dovresti andare in quella posizione per trovare il valore "This is myString". Questo viene spesso chiamato "allocato nell'heap". La pila e il mucchio
Alcuni autori affermano che i tipi di valore non sono nemmeno oggetti e che solo i tipi di riferimento possono essere oggetti. È certamente vero che le caratteristiche dell'oggetto sofisticato come eredità e incapsulamento sono possibili solo con tipi di riferimento. Ma abbiamo iniziato l'intero articolo dicendo che c'erano tre forme per gli oggetti, quindi devo accettare che le strutture sono una sorta di oggetto, anche se sono oggetti non standard.
Le origini di programmazione delle strutture risalgono a linguaggi orientati ai file come Cobol. In quelle lingue, i dati venivano normalmente elaborati come file flat sequenziali. I "campi" in un record del file sono stati descritti da una sezione "definizione dei dati" (a volte chiamata "layout del record" o "quaderno"). Quindi, se un record dal file conteneva:
1234567890ABCDEF9876
L'unico modo per sapere che "1234567890" era un numero di telefono, "ABCDEF" era un ID e 9876 era $ 98,76 attraverso la definizione dei dati. Le strutture ti aiutano a raggiungere questo obiettivo in VB.NET.
Struttura Struttura 1
End Structure
Perché a Corda è un tipo di riferimento, è necessario mantenere la stessa lunghezza con il VBFixedString attributo per record a lunghezza fissa. Puoi trovare una spiegazione estesa di questo attributo e degli attributi in generale nell'articolo Attributi in VB .NET.
Sebbene le strutture siano oggetti non standard, hanno molte funzionalità in VB.NET. Puoi codificare metodi, proprietà e persino eventi e gestori di eventi nelle strutture, ma puoi anche usare un codice più semplificato e poiché sono tipi di valore, l'elaborazione può essere più veloce. Ad esempio, potresti ricodificare la struttura sopra in questo modo:
Struttura Struttura 1
Sottotitolo mySub ()
MsgBox ("Questo è il valore di myPhone:" e myPhone)
End Sub
End Structure
E usalo in questo modo:
Dim myStruct As Structure1
myStruct.myPhone = "7894560123"
myStruct.mySub ()
Vale la pena dedicare un po 'di tempo a giocare con le strutture e imparare cosa possono fare. Sono uno degli angoli strani di VB.NET che possono essere un proiettile magico quando ne hai bisogno.