Modules, structuren en klassen

Er zijn slechts drie manieren om een VB.NET toepassing.

  • Modules
  • Structuren
  • Klassen

Maar de meeste technische artikelen gaan ervan uit dat u er al alles van weet. Als je een van de velen bent die nog een paar vragen heeft, kun je gewoon de verwarrende stukjes lezen en toch proberen erachter te komen. En als je een hebt veel tijd kunt u beginnen met zoeken Microsoft's documentatie:

  • "Een module is een draagbaar uitvoerbaar bestand, zoals type.dll of application.exe, bestaande uit een of meer klassen en interfaces."
  • Msgstr "Een klasse-instructie definieert een nieuw gegevenstype."
  • "De Structure-instructie definieert een samengesteld waardetype dat u kunt aanpassen."

Goed dan. Nog vragen?

Om wat eerlijker te zijn voor Microsoft, ze hebben pagina's en pagina's (en meer pagina's) met informatie over al deze die je kunt doorlopen. En ze moeten zo exact mogelijk zijn omdat ze de norm bepalen. Met andere woorden, de documentatie van Microsoft leest soms omdat het een wetboek is is een wetboek.

Maar als je net .NET aan het leren bent, kan het erg verwarrend zijn! Je moet ergens beginnen. Het is een goed begin om de drie fundamentele manieren te begrijpen waarop u code in VB.NET kunt schrijven.

instagram viewer

Je kan schrijven VB.NET code met een van deze drie vormen. Met andere woorden, u kunt een Console applicatie in VB.NET Express en schrijf:

Module Module 1
Sub Main ()
MsgBox ("Dit is een module!")
Einde Sub
Einde module
Klasse Klasse 1
Sub Main ()
MsgBox ("Dit is een klasse")
Einde Sub
Einde klasse
Structuur Struct1
Dim myString As String
Sub Main ()
MsgBox ("Dit is een structuur")
Einde Sub
Eindstructuur

Dit maakt het niet ieder zin als programma natuurlijk. Het punt is dat je geen syntaxisfout krijgt, dus het is "legaal" VB.NET-code.

Deze drie vormen zijn de enige manier om de bijenkoninginwortel van heel .NET te coderen: het object. Het enige element dat de symmetrie van de drie vormen onderbreekt, is de verklaring: Dim myString As String. Dat heeft te maken met het feit dat een structuur een "samengesteld gegevenstype" is, zoals Microsoft in hun definitie zegt.

Een ander ding om op te merken is dat alle drie de blokken een Sub Main () in hen. Een van de meest fundamentele principes van OOP wordt meestal genoemd inkapseling. Dit is het "black box" -effect. Met andere woorden, u zou elk object onafhankelijk moeten kunnen behandelen en dat omvat het gebruik van identiek benoemde subroutines als u dat wilt.

Klassen

Klassen zijn de 'juiste' plaats om te beginnen omdat, zoals Microsoft merkt op: "Een klasse is een fundamentele bouwsteen van objectgeoriënteerd programmeren (OOP)." Sommige auteurs beschouwen modules en structuren zelfs als speciale soorten klassen. Een klasse is meer objectgericht dan een module omdat het mogelijk is instantiëren (maak een kopie van) een klasse maar geen module.

Met andere woorden, u kunt coderen ...

Openbare klassenformulier 1
Private Sub Form1_Load (_
ByVal-afzender als systeem. Voorwerp, _
ByVal e als systeem. EventArgs) _
Behandelt MyBase. Laden
Dim myNewClass As Class1 = New Class1
myNewClass. ClassSub ()
Einde Sub
Einde klasse

(De klasse-instantiatie wordt benadrukt.)

Het maakt niet uit of de daadwerkelijke klasse zelf, in dit geval ...

Openbare klasse Class1
Sub ClassSub ()
MsgBox ("Dit is een klasse")
Einde Sub
Einde klasse

... staat op zichzelf in een bestand of maakt deel uit van hetzelfde bestand met de Formulier 1 code. Het programma verloopt precies hetzelfde. (Let erop dat Formulier 1 is ook een klas.)

U kunt ook klassecode schrijven die zich net als een module gedraagt, dat wil zeggen zonder deze te instantiëren. Dit heet een Gedeeld klasse. Het artikel "Statisch" (dat wil zeggen "Gedeeld") versus dynamische typen in VB.NET legt dit veel gedetailleerder uit.

Een ander feit over lessen moet ook in gedachten worden gehouden. Leden (eigenschappen en methoden) van de klasse bestaan ​​alleen terwijl de instantie van de klasse bestaat. De naam hiervoor is scoping. Dat is de bereik van een instantie van een klasse is beperkt. De bovenstaande code kan worden gewijzigd om dit punt op deze manier te illustreren:

Openbare klassenformulier 1
Private Sub Form1_Load (_
ByVal-afzender als systeem. Voorwerp, _
ByVal e als systeem. EventArgs) _
Behandelt MyBase. Laden
Dim myNewClass As Class1 = New Class1
myNewClass. ClassSub ()
myNewClass = Niets
myNewClass. ClassSub ()
Einde Sub
Einde klasse

Toen de tweede myNewClass. ClassSub () instructie wordt uitgevoerd, een NullReferenceException fout wordt gegenereerd omdat de ClassSub lid bestaat niet.

Modules

In VB 6 was het gebruikelijk om programma's te zien waarbij de meeste code in een module zat (A .BAS, bestand in plaats van bijvoorbeeld in een Het formulier bestand zoals Form1.frm.) In VB.NET zijn zowel modules als klassen in .VB bestanden. De belangrijkste reden waarom modules in VB.NET zijn opgenomen, is om programmeurs een manier te geven om hun systemen te organiseren door code op verschillende plaatsen te plaatsen om de reikwijdte en toegang voor hun code. (Dat wil zeggen, hoe lang leden van de module bestaan ​​en welke andere code kan verwijzen naar en gebruik maken van de leden.) Soms wilt u misschien code in afzonderlijke modules plaatsen om het gemakkelijker te maken ermee te werken.

Alle VB.NET-modules zijn Gedeeld omdat ze niet kunnen worden geïnstantieerd (zie hierboven) en ze kunnen worden gemarkeerd Vriend of Openbaar zodat ze toegankelijk zijn binnen dezelfde assembly of wanneer ernaar wordt verwezen.

Structuren

Structuren zijn het minst begrepen van de drie vormen van objecten. Als we het hadden over 'dieren' in plaats van 'objecten', zou de structuur een zijn Aardvarken.

Het grote verschil tussen een structuur en een klasse is dat een structuur een waarde type en een klasse is een referentietype.

Wat betekent dat? Ik ben zo blij dat je het vraagt.

Een waardetype is een object dat rechtstreeks in het geheugen is opgeslagen. Een Geheel getal is een goed voorbeeld van een waardetype. Als u een Geheel getal in je programma als dit ...

Dim myInt als geheel getal = 10

... en je controleerde de geheugenlocatie opgeslagen in myInt, zou u de waarde 10 vinden. Je ziet dit ook beschreven als "toegewezen worden op de stapel".

De stack en de heap zijn gewoon verschillende manieren om het gebruik van computergeheugen te beheren.

Een referentietype is een object waar de locatie van het object in het geheugen is opgeslagen. Dus het vinden van een waarde voor een referentietype is altijd een zoektocht in twee stappen. EEN Draad is een goed voorbeeld van een referentietype. Als u een Draad soortgelijk ...

Dim myString as String = "Dit is myString"

... en je controleerde de geheugenlocatie opgeslagen in myString, zou u een andere geheugenlocatie vinden (een genaamd wijzer - deze manier van doen is het hart van talen in C-stijl). U zou naar die locatie moeten gaan om de waarde "This is myString" te vinden. Dit wordt vaak "toegewezen op de heap" genoemd. De stapel en de hoop

Sommige auteurs zeggen dat waardetypes niet eens objecten zijn en dat alleen referentietypes objecten kunnen zijn. Het is zeker waar dat de verfijnde objectkenmerken zoals overerving en inkapseling zijn alleen mogelijk met referentietypen. Maar we begonnen dit hele artikel door te zeggen dat er drie vormen voor objecten waren, dus ik moet accepteren dat structuren een soort object zijn, zelfs als het niet-standaard objecten zijn.

De oorsprong van het programmeren van structuren gaat terug naar bestandsgeoriënteerde talen zoals Cobol. In die talen werden gegevens normaal gesproken verwerkt als sequentiële platte bestanden. De "velden" in een record uit het bestand werden beschreven door een "gegevensdefinitie" -sectie (ook wel een "recordlay-out" of een "schrift" genoemd). Dus als een record uit het bestand het volgende bevatte:

1234567890ABCDEF9876

De enige manier om te weten dat "1234567890" een telefoonnummer was, "ABCDEF" was een ID en 9876 was $ 98,76 via de gegevensdefinitie. Structuren helpen je dit te bereiken in VB.NET.

Structuur Structuur 1
Dim myPhone As String
Dim myID As String
Dim myAmount As String
Eindstructuur

Omdat een Draad is een referentietype, het is noodzakelijk om de lengte hetzelfde te houden met de VBFixedString attribuut voor records van vaste lengte. Een uitgebreide uitleg van dit attribuut en attributen in het algemeen vind je in het artikel Attributen in VB .NET.

Hoewel structuren niet-standaardobjecten zijn, hebben ze veel mogelijkheden in VB.NET. U kunt methoden, eigenschappen en zelfs gebeurtenissen en gebeurtenishandlers in structuren coderen, maar u kunt ook vereenvoudigde code gebruiken en omdat het waardetypes zijn, kan de verwerking sneller verlopen. U kunt de bovenstaande structuur bijvoorbeeld als volgt hercoderen:

Structuur Structuur 1
Dim myPhone As String
Dim myID As String
Dim myAmount As String
Sub mySub ()
MsgBox ("Dit is de waarde van myPhone:" & myPhone)
Einde Sub
Eindstructuur

En gebruik het als volgt:

Dim myStruct als structuur 1
myStruct.myPhone = "7894560123"
myStruct.mySub ()

Het is de moeite waard om een ​​beetje met structuren te spelen en te leren wat ze kunnen doen. Ze zijn een van de vreemde hoeken van VB.NET die een magische kogel kunnen zijn wanneer je het nodig hebt.

instagram story viewer