Moduler, strukturer och klasser

Det finns bara tre sätt att organisera en VB.NET Ansökan.

  • moduler
  • strukturer
  • Klasser

Men de flesta tekniska artiklar antar att du redan vet allt om dem. Om du är en av de många som fortfarande har några frågor kan du bara läsa förbi de förvirrande bitarna och försöka ta reda på det ändå. Och om du har en massa med tiden kan du börja söka igenom Microsofts dokumentation:

  • "En modul är en bärbar körbar fil, till exempel type.dll eller application.exe, som består av en eller flera klasser och gränssnitt."
  • "En klassuppgift definierar en ny datatyp."
  • "Struktureringssatsen definierar en sammansatt värdetyp som du kan anpassa."

Okej då. Några frågor?

För att vara lite mer rättvisa gentemot Microsoft har de sidor och sidor (och fler sidor) med information om alla dessa som du kan vada igenom. Och de måste vara så exakta som möjligt eftersom de sätter standarden. Med andra ord, Microsofts dokumentation läser ibland som en lagbok eftersom den är en lagbok.

Men om du bara lär dig .NET kan det vara väldigt förvirrande! Du måste börja någonstans. Att förstå de tre grundläggande sätten att skriva kod i VB.NET är ett bra ställe att börja på.

instagram viewer

Du kan skriva VB.NET kod med någon av dessa tre former. Med andra ord kan du skapa en Konsolapplikation i VB.NET Express och skriv:

Modulmodul1
Sub Main ()
MsgBox ("Detta är en modul!")
Avsluta under
Slutmodul
Klass Klass1
Sub Main ()
MsgBox ("Detta är en klass")
Avsluta under
Slutklass
Strukturstruktur1
Dim myString som sträng
Sub Main ()
MsgBox ("Detta är en struktur")
Avsluta under
Slutstruktur

Detta gör inte några känsla som ett program, naturligtvis. Poängen är att du inte får ett syntaxfel så det är "lagligt" VB.NET-kod.

Dessa tre former är det enda sättet att koda drottningbi-roten till hela .NET: objektet. Det enda elementet som avbryter symmetrin i de tre formerna är uttalandet: Dim myString som sträng. Det har att göra med en struktur som är en "sammansatt datatyp" som Microsoft säger i sin definition.

En annan sak att märka är att alla tre block har en Sub Main () i dem. En av de mest grundläggande principerna för OOP kallas vanligtvis inkapsling. Detta är den "svarta rutan" -effekten. Med andra ord, du bör kunna behandla varje objekt oberoende och det inkluderar att använda identiskt namngivna subroutiner om du vill.

Klasser

Lektionerna är den "rätta" platsen att börja för, som Microsoft noterar, "En klass är en grundläggande byggsten av objektorienterad programmering (OOP)." I själva verket behandlar vissa författare moduler och strukturer som bara speciella klasser. En klass är mer objektorienterad än en modul eftersom det är möjligt att instansiera (skapa en kopia av) en klass men inte en modul.

Med andra ord kan du koda ...

Public Class Form1
Privat subform1_Load (_
ByVal avsändare som system. Objekt, _
ByVal e As System. EventArgs) _
Hanterar MyBase. Ladda
Dim myNewClass As Class1 = New Class1
myNewClass. ClassSub ()
Avsluta under
Slutklass

(Klassininstitutionen betonas.)

Det spelar ingen roll om själva klassen, i det här fallet, ...

Public Class Class1
UnderklassSub ()
MsgBox ("Detta är en klass")
Avsluta under
Slutklass

... finns i en fil i sig själv eller är en del av samma fil med Form1 koda. Programmet körs på samma sätt. (Lägg märke till att Form1 är också en klass.)

Du kan också skriva klasskod som fungerar mycket som en modul, det vill säga utan att instansera den. Detta kallas a Delad klass. Artikeln "Statisk" (det vill säga "Delad") kontra dynamiska typer i VB.NET förklarar detta mycket mer detaljerat.

Ett annat faktum om klasser bör också komma ihåg. medlemmar (egenskaper och metoder) för klassen existerar endast medan klassen förekommer. Namnet på detta är avgränsning. Det är omfattning av en instans av en klass är begränsad. Koden ovan kan ändras för att illustrera denna punkt på detta sätt:

Public Class Form1
Privat subform1_Load (_
ByVal avsändare som system. Objekt, _
ByVal e As System. EventArgs) _
Hanterar MyBase. Ladda
Dim myNewClass As Class1 = New Class1
myNewClass. ClassSub ()
myNewClass = Ingenting
myNewClass. ClassSub ()
Avsluta under
Slutklass

När den andra myNewClass. ClassSub () uttalande utförs, a NullReferenceException felet kastas eftersom ClassSub medlem finns inte.

moduler

I VB 6 var det vanligt att se program där de flesta av koden fanns i en modul (A .BAS, fil snarare än till exempel i en Form fil som Form1.frm.) I VB.NET finns både moduler och klasser i .VB filer. Det huvudsakliga skälet till att moduler ingår i VB.NET är att ge programmerare ett sätt att organisera sina system genom att sätta kod på olika platser för att finjustera omfattningen och åtkomsten för deras koda. (Det vill säga hur länge medlemmar i modulen finns och vilken annan kod som kan hänvisa till och använda medlemmarna.) Ibland kanske du vill sätta kod i separata moduler bara för att göra det lättare att arbeta med.

Alla VB.NET-moduler är Delad eftersom de inte kan instanseras (se ovan) och de kan markeras vän eller offentlig så att de kan nås antingen inom samma enhet eller närhelst de refereras.

strukturer

Strukturer är det minst uppfattade av de tre formerna av objekt. Om vi ​​pratade om "djur" istället för "föremål", skulle strukturen vara en Aardvark.

Den stora skillnaden mellan en struktur och en klass är att en struktur är en värde typ och en klass är en referens typ.

Vad betyder det? Jag är så glad att du frågade.

En värdetyp är ett objekt som lagras direkt i minnet. En Heltal är ett bra exempel på en värdetyp. Om du förklarade ett Heltal i ditt program så här ...

Dim myInt som heltal = 10

... och du kontrollerade minnesplatsen lagrad i myInt, skulle du hitta värdet 10. Du ser också detta beskrivas som "tilldelas på bunten".

Stacken och högen är helt enkelt olika sätt att hantera användningen av datorminne.

En referenstyp är ett objekt där objektets plats lagras i minnet. Så att hitta ett värde för en referenstyp är alltid en tvåstegsuppslag. EN Sträng är ett bra exempel på en referenstyp. Om du förklarade en Sträng så här ...

Dim myString som String = "Detta är myString"

... och du kontrollerade minnesplatsen lagrad i Mystring, skulle du hitta en annan minnesplats (kallad a pekare - Det här sättet att göra saker är hjärtat i språk i C-stil). Du måste gå till den platsen för att hitta värdet "This is myString". Detta kallas ofta "tilldelas på högen". Bunten och högen

Vissa författare säger att värdetyper inte ens är objekt och att endast referenstyper kan vara objekt. Det är verkligen sant att de sofistikerade objektegenskaperna som arv och inkapsling är endast möjliga med referenstyper. Men vi började hela denna artikel med att säga att det fanns tre former för objekt, så jag måste acceptera att strukturer är någon form av objekt, även om det är icke-standardobjekt.

Strukturerings programmeringsursprung går tillbaka till filorienterade språk som Cobol. På dessa språk behandlades data normalt som sekventiella platta filer. "Fälten" i en post från filen beskrivs av en "datadefinition" -avsnitt (ibland kallad en "postlayout" eller en "copybook"). Så om en post från filen innehöll:

1234567890ABCDEF9876

Det enda sättet du skulle veta att "1234567890" var ett telefonnummer, "ABCDEF" var ett ID och 9876 var 98,76 $ var genom datadefinitionen. Strukturer hjälper dig att uppnå detta i VB.NET.

Struktur Structure1
Dim myPhone som sträng
Dim myID som sträng
Dim myAmount As String
Slutstruktur

Eftersom en Sträng är en referenstyp, det är nödvändigt att hålla längden densamma med VBFixedString attribut för poster med fast längd. Du kan hitta en utökad förklaring av detta attribut och attribut i allmänhet i artikeln Attribut i VB. NET.

Även om strukturer är icke-standardiserade objekt har de mycket kapacitet i VB.NET. Du kan koda metoder, egenskaper och till och med händelser och händelseshanterare i strukturer, men du kan också använda mer förenklad kod och eftersom de är värdetyper kan behandlingen gå snabbare. Du kan till exempel koda om strukturen ovan så här:

Struktur Structure1
Dim myPhone som sträng
Dim myID som sträng
Dim myAmount As String
Sub mySub ()
MsgBox ("Detta är värdet på myPhone:" & myPhone)
Avsluta under
Slutstruktur

Och använd det så här:

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

Det är värt din tid att leka med strukturer lite och lära sig vad de kan göra. De är ett av de udda hörnen på VB.NET som kan vara en magisk kula när du behöver det.