Moduler, strukturer og klasser

Det er bare tre måter å organisere en VB.NET applikasjon.

  • moduler
  • strukturer
  • klasser

Men de fleste tekniske artikler antar at du allerede vet alt om dem. Hvis du er en av de mange som fremdeles har noen få spørsmål, kan du bare lese forbi de forvirrende bitene og prøve å finne ut av det uansett. Og hvis du har en mye av tid, kan du begynne å søke gjennom Microsofts dokumentasjon:

  • "En modul er en bærbar kjørbar fil, for eksempel type.dll eller application.exe, som består av en eller flere klasser og grensesnitt."
  • "En klasseuttalelse definerer en ny datatype."
  • "Strukturuttalelsen definerer en sammensatt verditype som du kan tilpasse."

Greit da. Noen spørsmål?

For å være litt mer rettferdig mot Microsoft, har de sider og sider (og flere sider) med informasjon om alle disse du kan vade gjennom. Og de må være så nøyaktige som mulig fordi de setter standarden. Med andre ord, Microsofts dokumentasjon leser noen ganger som en lovbok fordi den er en lovbok.

Men hvis du bare lærer .NET, kan det være veldig forvirrende! Du må begynne et sted. Å forstå de tre grunnleggende måtene du kan skrive kode på VB.NET er et bra sted å starte.

instagram viewer

Du kan skrive VB.NET kode ved å bruke en av disse tre skjemaene. Med andre ord kan du lage en Konsollsøknad i VB.NET Express og skriv:

Modulmodul1
Sub Main ()
MsgBox ("Dette er en modul!")
Slutt sub
Sluttmodul
Klasse Klasse1
Sub Main ()
MsgBox ("Dette er en klasse")
Slutt sub
Sluttklasse
Strukturstruktur1
Dim myString som streng
Sub Main ()
MsgBox ("Dette er en struktur")
Slutt sub
Sluttstruktur

Dette gjør ikke noen sans som et program, selvfølgelig. Poenget er at du ikke får en syntaksfeil, så det er "lovlig" VB.NET-kode.

Disse tre formene er den eneste måten å kode dronningsbieroten til hele .NET: objektet. Det eneste elementet som avbryter symmetrien i de tre formene, er utsagnet: Dim myString som streng. Det har å gjøre med at en struktur er en "sammensatt datatype" slik Microsoft uttaler i sin definisjon.

En annen ting å merke seg er at alle tre blokker har en Sub Main () i dem. En av de mest grunnleggende rektorene i OOP kalles vanligvis innkapsling. Dette er "black box" -effekten. Med andre ord, du skal kunne behandle hvert objekt uavhengig, og det inkluderer bruk av identisk navngitte underrutiner hvis du vil.

klasser

Klassene er det 'rette' stedet å starte fordi, som Microsoft bemerker: "En klasse er en grunnleggende byggestein i objektorientert programmering (OOP)." Faktisk behandler noen forfattere moduler og strukturer som bare spesielle klasser. En klasse er mer objektorientert enn en modul fordi det er mulig å gjøre det instantiate (lage en kopi av) en klasse, men ikke en modul.

Med andre ord, du kan kode ...

Offentlig klasseskjema1
Privat subform1_Load (_
ByVal avsender som system. Objekt, _
ByVal e As System. EventArgs) _
Håndterer MyBase. Laste
Dim myNewClass As Class1 = New Class1
myNewClass. ClassSub ()
Slutt sub
Sluttklasse

(Klassestillingen blir vektlagt.)

Det har ikke noe å si om selve klassen, i dette tilfellet, ...

Offentlig klasse Class1
Underklassesub ()
MsgBox ("Dette er en klasse")
Slutt sub
Sluttklasse

... er i en fil av seg selv eller er en del av den samme filen med Form1 kode. Programmet kjører nøyaktig på samme måte. (Legg merke til det Form1 er en klasse også.)

Du kan også skrive klassekode som oppfører seg omtrent som en modul, det vil si uten å innstille den. Dette kalles a Delt klasse. Artikkelen "Statisk" (det vil si "Delt") kontra dynamiske typer i VB.NET forklarer dette mer detaljert.

Et annet faktum om klasser bør også huskes. medlemmer (egenskaper og metoder) for klassen eksisterer bare mens forekomsten av klassen eksisterer. Navnet på dette er scoping. Det er det omfang av et eksempel på en klasse er begrenset. Koden over kan endres for å illustrere dette poenget på denne måten:

Offentlig klasseskjema1
Privat subform1_Load (_
ByVal avsender som system. Objekt, _
ByVal e As System. EventArgs) _
Håndterer MyBase. Laste
Dim myNewClass As Class1 = New Class1
myNewClass. ClassSub ()
myNewClass = Ingenting
myNewClass. ClassSub ()
Slutt sub
Sluttklasse

Når den andre myNewClass. ClassSub () uttalelse blir henrettet, a NullReferenceException feil blir kastet fordi ClassSub medlem eksisterer ikke.

moduler

I VB 6 var det vanlig å se programmer der mesteparten av koden var i en modul (A .BAS, fil i stedet for for eksempel i en Form fil som Form1.frm.) I VB.NET er både moduler og klasser i .VB filer. Hovedgrunnen til at modulene er inkludert i VB.NET er å gi programmerere en måte å organisere systemene sine ved å plassere kode på forskjellige steder for å finjustere omfanget og tilgangen til deres kode. (Det vil si hvor lenge medlemmer av modulen eksisterer og hvilken annen kode som kan referere til og bruke medlemmene.) Noen ganger kan det være lurt å legge kode i separate moduler bare for å gjøre det lettere å jobbe med.

Alle VB.NET-moduler er Delt fordi de ikke kan bli instantivert (se over) og de kan merkes venn eller Offentlig slik at de kan få tilgang til enten i samme forsamling eller når det er henvist til dem.

strukturer

Strukturer er minst forstått av de tre objektsformene. Hvis vi snakket om "dyr" i stedet for "gjenstander", ville strukturen vært en jordsvin.

Den store forskjellen mellom en struktur og en klasse er at en struktur er en verdi type og en klasse er en referansetype.

Hva betyr det? Jeg er så glad for at du spurte.

En verditype er et objekt som er lagret direkte i minnet. en Integer er et godt eksempel på en verditype. Hvis du erklærte et Integer i programmet ditt som dette ...

Dim myInt som heltall = 10

... og du sjekket minneplassen som er lagret i Myint, vil du finne verdien 10. Du ser også dette beskrevet som "blir tildelt på bunken".

Stabelen og dyngen er ganske enkelt forskjellige måter å håndtere bruken av dataminne.

En referansetype er et objekt der plasseringen av objektet er lagret i minnet. Så å finne en verdi for en referansetype er alltid et totrinns oppslag. EN string er et godt eksempel på en referansetype. Hvis du erklærte a string som dette ...

Dim myString som streng = "Dette er myString"

... og du sjekket minneplassen som er lagret i myString, vil du finne en annen minneplassering (kalt a pekeren - Denne måten å gjøre ting på er selve hjertet til språk i C-stil). Du må gå til det stedet for å finne verdien "Dette er myString". Dette kalles ofte "å bli tildelt på dyngen". Stabelen og dyngen

Noen forfattere sier at verdityper ikke engang er objekter, og at bare henvisningstyper kan være objekter. Det er absolutt sant at de sofistikerte objektegenskapene som arv og innkapsling er bare mulig med referansetyper. Men vi startet hele artikkelen med å si at det var tre former for objekter, så jeg må akseptere at strukturer er en slags objekt, selv om det er ikke-standard objekter.

Programmeringsoriginene til strukturer går tilbake til filorienterte språk som Cobol. På disse språkene ble data vanligvis behandlet som sekvensielle flatfiler. "Feltene" i en post fra filen ble beskrevet av en "datadefinisjon" -del (noen ganger kalt "postoppsett" eller "kopibok"). Så hvis en post fra filen inneholdt:

1234567890ABCDEF9876

Den eneste måten du ville vite at "1234567890" var et telefonnummer, "ABCDEF" var en ID og 9876 var 98,76 dollar var gjennom datadefinisjonen. Strukturer hjelper deg å oppnå dette i VB.NET.

Struktur Struktur1
Dim myPhone Som streng
Dim myID som streng
Dim myAmount As String
Sluttstruktur

Fordi a string er en referansetype, er det nødvendig å holde lengden den samme med VBFixedString attributt for poster med fast lengde. Du finner en utvidet forklaring av dette attributtet og attributtene generelt i artikkelen Attributter i VB. NET.

Selv om strukturer er ikke-standardiserte objekter, har de mye kapasitet i VB.NET. Du kan kode metoder, egenskaper og til og med hendelser og hendelsesbehandlere i strukturer, men du kan også bruke mer forenklet kode, og fordi de er verdityper, kan behandlingen gå raskere. Du kan for eksempel kode strukturen over slik:

Struktur Struktur1
Dim myPhone Som streng
Dim myID som streng
Dim myAmount As String
Sub mySub ()
MsgBox ("Dette er verdien til myPhone:" og myPhone)
Slutt sub
Sluttstruktur

Og bruk den slik:

Dim myStruct As Structure1
myStruct.myPhone = "7894560123"
myStruct.mySub ()

Det er verdt tiden din å leke litt med strukturer og lære hva de kan gjøre. De er et av de rare hjørnene av VB.NET som kan være en magisk kule når du trenger det.