De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Visual Basic.NETPag.1 Hoofdstuk 4 - Procedures en arrays Inleiding Modules, Klassen en Procedures Sub procedures Function procedures Methoden Argument.

Verwante presentaties


Presentatie over: "Visual Basic.NETPag.1 Hoofdstuk 4 - Procedures en arrays Inleiding Modules, Klassen en Procedures Sub procedures Function procedures Methoden Argument."— Transcript van de presentatie:

1 Visual Basic.NETPag.1 Hoofdstuk 4 - Procedures en arrays Inleiding Modules, Klassen en Procedures Sub procedures Function procedures Methoden Argument promotie Option Strict en data type conversie Value types en Reference Types Doorgeven van argumenten : By Val en By Ref Duur van identifiers Scope regels Recursie Procedure overloading en optionele argumenten Modules Arrays Doorgeven van Arrays aan procedures Doorgeven van Arrays : By Val of ByRef Multidimensionele arrays

2 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Inleiding Divide en Conquer :  deel applicatie op in deelproblemen. Dat maakt de applicatie eenvoudiger te debuggen en te onderhouden!

3 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Modules, Klassen en Procedures Framework Class Library (FCL)  Bevat veel “prepackaged” klassen en methodes om tal van bewerkingen uit te voeren Programmer-defined procedures  3 type van procedures Sub procedures Function procedures Event procedures  Een procedure wordt aangeroepen met een procedure call Voordelen van procedures Divide-and-conquer benadering maakt applicatie eenvoudiger te debuggen en onderhouden Software herbruikbaarheid Vermijden van duplicatie van code in een programma

4 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 4 1 ‘ Payment.vb 2 ' Sub procedure that prints payment information. 3 4 Module modPayment 5 6 Sub Main() 7 8 ' call Sub procedure PrintPay 4 times 9 PrintPay(40, 10.5) 10 PrintPay(38, 21.75) 11 PrintPay(20, 13) 12 PrintPay(50, 14) Console.ReadLine() ' prevent window from closing 15 End Sub ' Main End Module ' modPayment 17 ' print amount of money earned in command window 18 Sub PrintPay(ByVal hours As Double, ByVal wage As Decimal) ' pay = hours * wage 21 Console.WriteLine("The payment is {0:C}", hours * wage) 22 End Sub ' PrintPay 4.3 Sub Procedures Voorbeeld : Console applicatie voor printen van verloning van werknemers The payment is $ The payment is $ The payment is $ The payment is $ PrintPay wordt uitgevoerd, wanneer het aangeroepen wordt in de Main PrintPay ontvangt de waarden van elk argument en plaatst deze in de parameter variabelen hours en wage Opm : PrintPay bevindt zich in de module modPayment. Alle procedures moeten gedefinieerd zijn binnen een module of klasse

5 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Sub Procedures Syntax definitie van procedure Sub procedure-name(parameter-list) declarations and statements End Sub Bestaat uit  Procedure header : de eerste lijn Sub : geeft aan dat het om een Sub-procedure gaat Procedure-name : de naam van de procedure. Moet een geldige identifier zijn Parameter-list : komma seperated lijst met argumenten (naam en type) die dient te worden doorgegeven aan de procedure  Procedure body : de declaraties en uit te voeren instructies  End Sub : einde procedure

6 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Sub Procedures Oproepen van een sub procedure procedure-name(parameter-list)  Parameter-list : komma seperated lijst met argumenten die dienen te worden doorgegeven aan de procedure. Moet overeenkomen met parameter-lijst in procedure header in termen van Aantal Type Volgorde  Als procedure-header geen parameterlijst bevat dan moet bij het aanroepen de procedure_name gevolgd worden door ()

7 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Function Procedure Retourneren een waarde! Syntax Functie definitie Function procedure-name(parameter-list) As return-type declarations and statements End Function  Return-type : gegevenstype van de returnwaarde Return statement  Kan om het even waar staan en kan meerdere malen voorkomen in de function body  Retourneert de waarde van de procedure (1 waarde, eventueel na typeconversie)  Controle wordt onmiddellijk teruggegeven aan oproepend programma.

8 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Function Procedure Oproepen van een functie Variabele = procedure-name(parameter-list) - Als uitdrukking in return statement niet geconverteerd kan worden naar return-type => runtime error - Als return statement niet wordt uitgevoerd bij een function call of return statement vergeten => runtime error - Probeer zoveel mogelijk functies te schrijven met 1 return statement, I.p.v. meerdere return statements (nl. 1 per mogelijke waarde)

9 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag End Module ' modSquareInteger 1 ' SquareInteger.vb 2 ' Function procedure to square a number. 3 4 Module modSquareInteger 5 6 Sub Main() 16 End Sub ' Main 17 7 Dim i As Integer ' counter 8 9 Console.WriteLine("Number" & vbTab & "Square" & vbCrLf) ' square numbers from 1 to For i = 1 To Console.WriteLine(i & vbTab & Square(i)) 14 Next ' Function Square is executed 19 ' only when the function is explicitly called. 20 Function Square(ByVal y As Integer) As Integer 21 Return y ^ 2 22 End Function ' Square Function Procedure Voorbeeld : berekenen machtsverheffing Het Return statement beëindigt de uitvoering van de procedure en retourneert het resultaat y ^ 2 Number Square

10 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Methodes Methoden zijn procedures (sub of functies) binnen een klasse.  FCL methode  Custom methode in een programmer-defined klasse Voorbeeld

11 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Methods 1 ' Maximum.vb 2 ' Program finds the maximum of three numbers input. 3 4 Public Class FrmMaximum 5 Inherits System.Windows.Forms.Form 6 7 ' prompts for three inputs 8 Friend WithEvents lblOne As System.Windows.Forms.Label 9 Friend WithEvents lblTwo As System.Windows.Forms.Label 10 Friend WithEvents lblThree As System.Windows.Forms.Label ' displays result 13 Friend WithEvents lblMaximum As System.Windows.Forms.Label ' read three numbers 16 Friend WithEvents txtFirst As System.Windows.Forms.TextBox 17 Friend WithEvents txtSecond As System.Windows.Forms.TextBox 18 Friend WithEvents txtThird As System.Windows.Forms.TextBox ' reads inputs and calculate results 21 Friend WithEvents cmdMaximum As System.Windows.Forms.Button ' Visual Studio.NET generated code 24 Declaratie van alle controls in de GUI. Code wordt gegenereert bij ontwerpen van formulier a.d.h.v. Toolbox Alle formulieren erven van de klasse System.Windows.Forms.Form

12 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Methods 25 ' obtain values in each text box, call procedure Maximum 26 Private Sub cmdMaximum_Click(ByVal sender As System.Object, _ 27 ByVal e As System.EventArgs) Handles cmdMaximum.Click 29 Dim value1, value2, value3 As Double value1 = txtFirst.Text 32 value2 = txtSecond.Text 33 value3 = txtThird.Text lblMaximum.Text = Maximum(value1, value2, value3) 36 End Sub ' cmdMaximum_Click ' find maximum of three parameter values 39 Function Maximum(ByVal valueOne As Double, _ 40 ByVal valueTwo As Double, ByVal valueThree As Double) Return Math.Max(Math.Max(valueOne, valueTwo), valueThree) 43 End Function ' Maximum End Class ' FrmMaximum Opvragen van de inhoud van de 3 TextBoxes a.d.h.v. de Text property 4.5 Methods Event handler cmdMaximum_Click Handelt de gebeurtenis “muisklik op Button cmdMaximum” af

13 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 13 Addendum : De Math klasse

14 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 14 Addendum : Gegevenstypen in VB.NET

15 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Argument Promotie Coercion (afdwingen) van argumenten : Afdwingen dat argumenten van het geschikte data type zijn zodat ze kunnen worden doorgegeven aan de procedure. Widening conversie (uitbreiden) : een type converteert naar een ander type zonder gegevensverlies  Voorbeeld : Console.Write (Math.Sqrt(4)) Narrowing conversie(verkleinen) : Conversie probeert de gegevens van een groter type te converteren naar een kleiner type (in bytes of precisie) wat aanleiding kan geven tot gegevensverlies  Voorbeeld Dim X As Single Dim Y As Integer Y=X Getallen achter de komma gaan verloren

16 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Argument Promotie Toegestane bereiken bij typeconversie (promotieregels) Eveneens van toepassing op gemengde uitdrukkingen  Promotie naar “hoger” data type in uitdrukking  Voorbeeld : Dim X As Single, Y As Double Y+=X

17 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Option Strict en Data-Type Conversie Option Explicit  Vereist dat variabelen gedeclareerd worden voor gebruik  Defaultwaarde : ON  Instellen Op projectniveau : aanpassen van property pages In klasse- of modulebestand : statement “Option Explicit ON”  Stel dit in op ON! Option Strict  Laat geen impliciete narrowing conversie toe=> expliciete conversie  Defaultwaarde : OFF  Instellen : idem Option Explicit  Stel dit in op ON!

18 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Option Strict en Data-Type Conversie De Namespace System.Convert  Bevat methodes om datatypes expliciet te converteren.  Voorbeeld (als Option Strict On): Dim number As Integer Number = Convert.ToInt32(Console.Readline())

19 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Value Types en Reference Types Variabele van value type  Bevatten de data  Gebruikt voor 1 stukje data  Datatypes Built-in’s : byte, short, integer, long, double, single,boolean, date, decimal, char Programmer-defined : Structure, enumerations  Voorbeeld Dim int1 As Integer = 5 Dim int2 As Integer int2 = int1 int1 = 10 int1int2 10 5

20 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Value Types en Reference Types Variabele van reference type  Variabele bevat een verwijzing naar het object  Gekend als objecten  Datatypes : Built-in’s : String en Object Programmer- defined : klassen, interfaces, delegates  Voorbeeld Dim obj1 As New TheClass() Dim obj2 As TheClass obj2 = obj1 obj1obj2

21 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Value Types en Reference Types Literals  Hard gecodeerde waarden in de code  Moet overeenstemmen met 1 van de primitieve data types.  Bvb Dim price As Object = 992.4D ‘dwingt decimal type af

22 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag By-Value en By-Reference Doorgeven van argumenten aan een procedure  Doorgeven By Value (via de waarde) Er wordt een copie van de waarde doorgegeven aan de procedure. Dit heeft tot gevolg dat de actuele waarde van de variabele bij aanroep niet door de procedure kan worden aangepast. Keyword ByVal  Doorgeven By Reference (adhv een referentie) Er wordt een pointer naar (het adres van) het argument doorgegeven aan de procedure. De procedure heeft rechtstreeks toegang tot de actuele waarde en kan deze ook aanpassen. KeyWord ByRef  Argument tussen (), worden steeds By Value doorgegeven  Reference types worden steeds By Reference doorgegeven

23 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag By-Value en By-Reference 1.'ByRefTest.vb : Demonstrates passing by reference. 2.Module modByRefTest 3. ' squares three values ByVal and ByRef, displays results 4. Sub Main() 5. Dim number As Integer = 2 6. Console.WriteLine("Before entering SquareByValue number is {0}", number) 7. SquareByValue(number) ' passes number by value 8. Console.WriteLine("After exiting SquareByValue number is {0}" & vbCrLf, number) 9. number = Console.WriteLine("Before entering SquareByRef number is {0}", number) 11. SquareByRef(number) ' passes number by reference 12. Console.WriteLine("After exiting SquareByRef number is {0}" & vbCrLf, number) 13. number = Console.WriteLine("Before entering SquareByRef number is ({0})", number) 15. SquareByRef((number)) ' passes number by value 16. Console.WriteLine("After exiting SquareByRef number is {0}" & vbCrLf, number) 17. End Sub 18. Sub SquareByValue(ByVal number As Integer) 19. number *= number 20. Console.WriteLine("Before exiting SquareByValue number is {0}", number) 21. End Sub ' SquareByValue 22. ' squares number by reference (note ByRef keyword) 23. Sub SquareByRef(ByRef number As Integer) 24. number *= number 25. Console.WriteLine("Before exiting SquareByRef number is {0}", number) 26. End Sub ' SquareByReference 27.End Module ' modByRefTest Bij ByVal wordt een copie van de waarde doorgegeven Het plaatsen van het argument tussen haakjes dwingt pass-by- value af ByRef geeft directe toegang tot de waarde in de originele variabele

24 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Duur van identifiers Identifier’s duration (lifetime)  Periode dat de identifier in het geheugen bestaat Identifier’s scope  Bepaalt waar de variabele gebruikt kan worden in het programma Automatic duration  Identifiers gedeclareerd als locale variabelen in een procedure hebben automatic duration Instance variable  Een variable gedeclareerd in een klasse of module buiten een procedure  Bestaan zolang klasse in geheugen geladen

25 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Scope regels  Class scope Variabelen gedeclareerd in een klasse, buiten een procedure, hebben een class scope. Scope begint na keyword Class en eindigt bij End Class statement  Module scope Variabelen gedeclareerd in een module, buiten een procedure, hebben module scope, wat vergelijkbaar is met class scope  Namespace scope Procedures gedefinieerd in een module hebben per default namespace scope, wat betekent dat ze toegankelijk zijn in het volledige project  Block scope Identifiers gedeclareerd binnen een blok (bvb body van If/then, of van een procedure) hebben blok scope

26 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' Scoping.vb 2 ' Demonstrates scope rules and instance variables. 3 4 Public Class FrmScoping 5 Inherits System.Windows.Forms.Form 6 7 Friend WithEvents lblOutput As System.Windows.Forms.Label 8 9 ' Windows Form Designer generated code ' instance variable can be used anywhere in class 12 Dim value As Integer = ' demonstrates class scope and block scope 15 Private Sub FrmScoping_Load(ByVal sender As System.Object, _ 16 ByVal e As System.EventArgs) Handles MyBase.Load ' variable local to FrmScoping_Load hides instance variable 19 Dim value As Integer = lblOutput.Text = "local variable value in" & _ 22 " FrmScoping_Load is " & value MethodA() ' MethodA has automatic local value 25 MethodB() ' MethodB uses instance variable value 26 MethodA() ' MethodA creates new automatic local value 27 MethodB() ' instance variable value retains its value lblOutput.Text &= vbCrLf & vbCrLf & "local variable " & _ 30 "value in CScoping_Load is " & value 31 End Sub ' FrmScoping_Load Declaratie instance variabele value. Deze variabele is hidden voor alle procedures met een lokale variabele met naam value

27 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 27 ' automatic local variable value hides instance variable 34 Sub MethodA() 35 Dim value As Integer = 25 ' initialized after each call lblOutput.Text &= vbCrLf & vbCrLf & "local variable " & _ 38 "value in MethodA is " & value & " after entering MethodA" 39 value += 1 40 lblOutput.Text &= vbCrLf & "local variable " & _ 41 "value in MethodA is " & value & " before exiting MethodA" 42 End Sub ' MethodA ' uses instance variable value 45 Sub MethodB() 46 lblOutput.Text &= vbCrLf & vbCrLf & "instance variable" & _ 47 " value is " & value & " after entering MethodB" 48 value *= lblOutput.Text &= vbCrLf & "instance variable " & _ 50 "value is " & value & " before exiting MethodB" 51 End Sub ' MethodB End Class ' FrmScoping MethodB gebruikt de instance variabele value, en past zijn waarde aan MethodA gebruikt een lokale variabele value. Bij iedere oproep wordt variabele opnieuw gecreëerd en geinitialiseerd op 25. De variabele wordt vernietigd bij beëindigen van de procedureuitvoering

28 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Recursion 5! 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 5! 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 Final value = 120 5! = 5 * 24 = 120 is returned 4! = 4 * 6 = 24 is returned 3! = 3 * 2 = 6 is returned 2! = 2 * 1 = 2 is returned 1 returned (a) Procession of recursive calls(b) Values returned from each recursive call

29 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Recursie 1 ' Factorial.vb 2 ' Calculating factorials using recursion. 3 4 Public Class FrmFactorial 5 Inherits System.Windows.Forms.Form 6 7 Friend WithEvents lblEnter As Label ' prompts for Integer 8 Friend WithEvents lblFactorial As Label ' indicates output 9 10 Friend WithEvents txtInput As TextBox ' reads an Integer 11 Friend WithEvents txtDisplay As TextBox ' displays output Friend WithEvents cmdCalculate As Button ' generates output ' Visual Studio.NET generated code Private Sub cmdCalculate_Click(ByVal sender As System.Object, _ 18 ByVal e As System.EventArgs) Handles cmdCalculate.Click Dim value As Integer = Convert.ToInt32(txtInput.Text) 21 Dim i As Integer 22 Dim output As String txtDisplay.Text = "" For i = 0 To value 27 txtDisplay.Text &= i & "! = " & Factorial(i) & vbCrLf 28 Next End Sub ' cmdCalculate_Click Conversie van String naar Integer

30 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' recursively generates factorial of number 33 Function Factorial(ByVal number As Long) As Long If number <= 1 Then ' base case 36 Return 1 37 Else 38 Return number * Factorial(number - 1) 39 End If End Function ' Factorial End Class ' FrmFactorial Als number > 1, roept de procedure zichzelf terug aan, met een eenvoudiger probleem

31 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Procedure Overloading Meerdere procedures met dezelfde naam maar verschillende parameterlijsten (aantal of type) Overloading van procedures die ongeveer dezelfde taken uitvoeren, maakt programma’s leesbaarder.

32 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' Overload.vb 2 ' Using overloaded methods. 3 4 Public Class FrmOverload 5 Inherits System.Windows.Forms.Form 6 7 Friend WithEvents outputLabel As Label 8 9 ' Visual Studio.NET generated code Private Sub FrmOverload_Load(ByVal sender As System.Object, _ 12 ByVal e As System.EventArgs) Handles MyBase.Load outputLabel.Text = "The square of Integer 7 is " & _ 15 square(7) & vbCrLf & "The square of Double " & _ 16 "7.5 is " & square(7.5) 17 End Sub ' FrmOverload_Load Function Square(ByVal value As Integer) As Integer 20 Return Convert.ToInt32(value ^ 2) 21 End Function ' Square Function Square(ByVal value As Double) As Double 24 Return value ^ 2 25 End Function ' Square End Class ' FrmOverload De compiler gebruikt een logische naam om een onderscheid te maken tussen de 2 Square methods De compilergebruikt bvb de logische naam “Square of Integer” De compiler gebruikt bvb de logische naam “Square of Double” Event treedt op voordat het formulier voor de eerste keer wordt geopend.

33 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' Overload2.vb 2 ' Using overloaded procedures with identical signatures and 3 ' different return types. 4 5 Public Class FrmOverload2 6 Inherits System.Windows.Forms.Form 7 8 Friend WithEvents outputLabel As Label 9 10 ' Visual Studio.NET generated code Private Sub FrmOverload2_Load(ByVal sender As System.Object, _ 13 ByVal e As System.EventArgs) Handles MyBase.Load outputLabel.Text = "The square of Integer 7 is " & _ 16 square(7) & vbCrLf & "The square of Double " & _ 17 "7.5 is " & square(7.5) 18 End Sub ' FrmOverload2_Load Function Square(ByVal value As Double) As Integer 21 Return Convert.ToInt32(value ^ 2) 22 End Function ' Square Function Square(ByVal value As Double) As Double 25 Return value ^ 2 26 End Function ' Square End Class ' FrmOverload2 Procedure calls kunnen niet onderscheiden worden o.b.v. return type Syntax fout

34 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Optionele parameters Argumenten binnen een procedure kunnen als optioneel gedefinieerd worden. Het oproepend programma beslist dan om al dan niet een waarde door te geven. Optionele argumenenten worden worden voorafgegaan door keyword Optional in de procedure header en bevatten een defaultwaarde Voorbeeld Sub ExampleProcedure(ByVal value1 as boolean, Optional _ ByVal value2 As Long = 0) Mogelijke calls : ExampleProcedure(True), ExampleProcedure(False,10) Syntax errors, als je in de procedure header geen default waarde meegeeft voor een optionele parameter. Niet optionele parameters rechts van de optionele parameters definieert

35 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Optionele parameters Voorbeeld : machtsverheffing. De gebruiker geeft de base en de exponent op. De exponent is niet verplicht. Als de gebruiker geen waarde ingeeft voor de exponent dan wordt de waarde 2 genomen.

36 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Optionele parameters  We bekijken eerst de functie Power ' use iteration to calculate power 38 Function Power(ByVal base As Integer, _ 39 Optional ByVal exponent As Integer = 2) As Integer Dim total As Integer = 1 42 Dim i As Integer For i = 1 To exponent 45 total *= base 46 Next Return total 49 End Function ' Power End Class ' FrmPower Als argument niet wordt doorgegeven bij procedure aanroep, defaulteert het Optional argument naar de waarde 2

37 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' Power.vb 2 ' Calculates the power of a value, defaults to square. 3 4 Public Class FrmPower 5 Inherits System.Windows.Forms.Form 6 7 Friend WithEvents txtBase As TextBox ' reads base 8 Friend WithEvents txtPower As TextBox ' reads power 9 10 Friend WithEvents inputGroup As GroupBox Friend WithEvents lblBase As Label ' prompts for base 13 Friend WithEvents lblPower As Label ' prompts for power 14 Friend WithEvents lblOutput As Label ' displays output Friend WithEvents cmdCalculate As Button ' generates output ' Visual Studio.NET generated code ' reads input and displays result 21 Private Sub cmdCalculate_Click(ByVal sender As System.Object, _ 22 ByVal e As System.EventArgs) Handles cmdCalculate.Click Dim value As Integer ' call version of Power depending on power input 27 If Not txtPower.Text = "" Then 28 value = Power(Convert.ToInt32(txtBase.Text), _ 29 Convert.ToInt32(txtPower.Text)) 30 Else 31 value = Power(Convert.ToInt32(txtBase.Text)) 32 End If lblOutput.Text = Convert.ToString(value) 35 End Sub ' cmdCalculate_Click Bepaalt of txtPower een waarde bevat

38 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Modules Gebruikt voor het groeperen van gerelateerde procedures, zodat ze hergebruikt kunnen worden in andere projecten In veel opzichten gelijk aan klassen Zouden self-contained moeten zijn Toevoegen van module aan project : Project > Add Module Voorbeeld :  module groepeert procedures m.b.t. dobbelsteen, voor hergebruik in andere programma’s  Programma, met een dobbelsteen, die van de functionaliteit in module gebruik maakt

39 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' DiceModule.vb 2 ' A collection of common dice procedures. 3 4 Imports System.IO 5 6 Module modDice 7 8 Dim randomObject As Random = New Random() 9 10 ' rolls single die 11 Function RollDie() As Integer 12 Return randomObject.Next(1, 7) 13 End Function ' RollDie ' die summation procedure 16 Function RollAndSum(ByVal diceNumber As Integer) _ 17 As Integer Dim i As Integer 20 Dim sum As Integer = For i = 1 To diceNumber 23 sum += RollDie() 24 Next Return sum 27End Function ' RollAndSum ' returns die image 30 Function GetDieImage(ByVal dieValue As Integer, _ 31 Optional ByVal baseImageName As String = "die") _ 32 As System.Drawing.Image Return Image.FromFile(Directory.GetCurrentDirectory & _ 35 "\Images\" & baseImageName & dieValue & ".png") 36 End Function ' GetDieImage 37 End Module ' modDice modDice groupeert verscheidenen dice-related procedures in 1 module, voor hergebruik in andere programma’s. Om module toe te voegen aan Project : Project > Add Module Simuleert het gooien van de dobbelsteen en retourneert een resultaat. FCL Class Random, methode Next genereert random nummer tussen 1 en 6 De dobbelsteen wordt diceNumber maal gegooid en het resultaat van de worpen wordt gesommeerd. Retourneert Image : -dieValue = de worp (het nr die getoond dient te worden op de dobbelsteen) -baseImageName = naam beeldje.

40 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Modules GroupBox PictureBox Button Label

41 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' DiceModuleTest.vb 2 ' Demonstrates modDiceModule procedures 3 Imports System.Drawing 4 5 Public Class FrmDiceModuleTest 6 Inherits System.Windows.Forms.Form 7 Friend WithEvents lblSum As Label ' displays 10-roll sum 8 Friend WithEvents diceGroup As GroupBox 9 ' dice images 10 Friend WithEvents picDie1 As PictureBox 11 Friend WithEvents picDie2 As PictureBox 12 Friend WithEvents cmdRollDie1 As Button ' rolls blue die 13 Friend WithEvents cmdRollTen As Button ' simulates 10 rolls 14 Friend WithEvents cmdRollDie2 As Button ' rolls red die 15 ' Visual Studio.NET generated code Private Sub cmdRollDie1_Click(ByVal sender As System.Object, _ 18 ByVal e As System.EventArgs) Handles cmdRollDie1.Click picDie1.Image = modDice.GetDieImage(modDice.RollDie()) 21 End Sub ' cmdRollDie1_Click Private Sub cmdRollDie2_Click(ByVal sender As System.Object, _ 24 ByVal e As System.EventArgs) Handles cmdRollDie2.Click picDie2.Image = modDice.GetDieImage(modDice.RollDie(), "redDie") 27 End Sub ' cmdRollDie2_Click 28 Private Sub cmdRollTen_Click(ByVal sender As System.Object, _ 29 ByVal e As System.EventArgs) Handles cmdRollTen.Click lblSum.Text = Convert.ToString(modDice.RollAndSum(10)) 32 End Sub ' cmdRollTen_Click End Class ' FrmDiceModuleTest Voor het oproepen van een procedure in de module modDice, gebruik je de naam van de module, gevolgd door de dot (.) operator en de naam van de procedure Gooien van dobbelsteen en tonen van de worp op een beeldje. Stelt de Text property van lblSum = resultaat van 10 worpen

42 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Arrays Arrays zijn data structuren bestaande uit data items van hetzelfde type. De gegevens uit een array worden opgeslagen in een aaneengesloten geheugengebied Erven van de klasse Array binnen de Namespace System “Statische” entiteiten : éénmaal gecreëerd behouden ze hun grootte Er wordt naar een element verwezen adhv de index (1ste element heeft index 0) Elke array kent zijn eigen lengte, via de Length property GetLowerBound/GetUpperBound Methode : retourneert index van eerste/laatste element (= Length – 1) van array. Methode heeft als input parameter de dimensie Rank : aantal dimensies in array ( 1-dim.array => rank = 1)

43 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Arrays Voorbeeld array met 12 elementen -45 numberArray(0) 6 numberArray(1) 0 numberArray(2) 72 numberArray(3) 1543 numberArray(4) -89 numberArray(5) 0 numberArray(6) 62 numberArray(7) -3 numberArray(8) 1 numberArray(9) 6453 numberArray(10) 78 numberArray(11) Naam array (alle elementen in de array hebben dezelfde naam) numberArray) Positie nummer (index of subscript) van element in numberArray

44 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Arrays Erven van de array klasse in de System Namespace Declaratie van array (opgeven van type van array) Dim numberArray As Integer() Toewijzen van een object aan een array reference numberArray = New Integer(11) {} Initializer list numberArray = New Integer() {1,2,3,6} Of verkort Dim numberArray As Integer()= New Integer(11) {} of Dim numberArray(11) as Integer of Dim numberArray() as Integer= {1,2,3,6}

45 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' InitArray.vb : Declaration, allocating and Initializing arrays. 2 Imports System.Windows.Forms 3 Module modInitArray 4 5 Sub Main() 6 Dim output As String 7 Dim i As Integer 8 9 Dim array1, array2 As Integer() ' declare two arrays ' initializer list specifies number of elements 12 ' and value of each element 13 array1 = New Integer() {32, 27, 64, 18, 95, _ 14 14, 90, 70, 60, 37} ' allocate array2 based on length of array1 17 array2 = New Integer(array1.GetUpperBound(0)) {} ' set values in array2 by a calculation 20 For i = 0 To array2.GetUpperBound(0) 21 array2(i) = * i 22 Next output &= "Subscript " & vbTab & "Array1" & vbTab & _ 25 "Array2" & vbCrLf ' display values for both arrays 28 For i = 0 To array1.GetUpperBound(0) 29 output &= i & vbTab & array1(i) & vbTab & array2(i) & _ 30 vbCrLf 31 Next 32 MessageBox.Show(output, "Array of Integer Values", _ 33 MessageBoxButtons.OK, MessageBoxIcon.Information) 34 End Sub ' Main 35 End Module ' modInitArray Gebruikt de waarden in de arrays om de String output op te bouwen en dan te tonen in een MessageBox Initialisatie van elk element in array2 dmv For loop (even integers) Allocatie array2, grootte = array1.GetUpperBound(0), dus beide hebben dezelfde lengte Allocatie van 10 elementen in array1 adhv New + initialisatie van elementen adhv initializer list 1 statement wordt gebruikt om 2 arrays te declareren Voegt aan output de kolomheadings toe van de tabel die zal getoond worden

46 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Doorgeven van array aan procedure Doorgeven van Array  Specifieer de naam van de array zonder haakjes  Elke array “kent” zijn upper bound Je dient de upperbound niet door te geven als een apart argument  In Visual Basic, worden arrays altijd by reference doorgegeven Ontvangen van array  De procedure’s parameter lijst moet specifiëren dat het om een array gaat

47 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Passing Arrays : ByVal of ByRef Visual Basic.NET  Een variabele die een object “opslaat”, zoals een array, zal het object zelf niet opslaan  Maar wel een verwijzing (reference) naar het object Nl de geheugenlocatie waar object reeds is opgeslagen ByVal  De waarde van het argument wordt gecopieerd naar de lokale variabele in de procedure  Aanpassingen aan de variabele gebeuren op de lokale copy van die variabele, niet op de originele variabele van het oproepend programma  Maar als het argument een reference type is, zoals een array, dan zal ByVal eigenlijk ByRef doorgeven, zodat de aanpassingen toch op het origineel object gebeuren.

48 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Passing Arrays : ByVal of ByRef ByRef  Igv ByRef krijgt de opgeroepen procedure de controle over de doorgegeven referentie. De opgeroepen procedure kan bijgevolg de verwijzing aanpassen en laten wijzen naar een ander object of zelfs de verwijzing op Nothing zetten. Gebruik ByVal IS operator  Test of 2 variabelen naar hetzelfde object wijzen If firstArray Is firstArrayCopy Then Console.WriteLine(vbCrLf & "The references are equal.") Else Console.WriteLine(vbCrLf & "The references are not equal.") End If

49 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' ArrayReferenceTest.vb 2 ' Testing the effects of passing array references using 3 ' ByVal and ByRef. 4 5 Module modArrayReferenceTest 6 7 Sub Main() 8 Dim i As Integer 9 10 ' declare array references 11 Dim firstArray As Integer() 12 Dim firstArrayCopy As Integer() ' allocate firstArray and copy its reference 15 firstArray = New Integer() {1, 2, 3} 16 firstArrayCopy = firstArray Console.WriteLine("Test passing array reference " & _ 19 "using ByVal.") 20 Console.Write("Contents of firstArray before " & _ 21 "calling FirstDouble: ") ' print contents of firstArray 24 For i = 0 To firstArray.GetUpperBound(0) 25 Console.Write(firstArray(i) & " ") 26 Next ' pass firstArray using ByVal 29 FirstDouble(firstArray) Console.Write(vbCrLf & "Contents of firstArray after " & _ 32 "calling FirstDouble: ") 33 Print de inhoud van FirstArray; om dan te kunnen tonen dat FirstDouble de inhoud van de array aanpast Kopieert verwijzing firstArray naar variabele firstArrayCopy. Ze verwijzen nu beide naar hetzelfde object

50 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' print contents of firstArray 35 For i = 0 To firstArray.GetUpperBound(0) 36 Console.Write(firstArray(i) & " ") 37 Next ' test whether reference was changed by FirstDouble 40 If firstArray Is firstArrayCopy Then 41 Console.WriteLine(vbCrLf & "The references are " & _ 42 "equal.") 43 Else 44 Console.WriteLine(vbCrLf & "The references are " & _ 45 "not equal.") 46 End If ' declare array references 49 Dim secondArray As Integer() 50 Dim secondArrayCopy As Integer() ' allocate secondArray and copy its reference 53 secondArray = New Integer() {1, 2, 3} 54 secondArrayCopy = secondArray Console.WriteLine(vbCrLf & "Test passing array " & _ 57 "reference using ByRef.") 58 Console.Write("Contents of secondArray before " & _ 59 "calling SecondDouble: ") ' print contents of secondArray before procedure call 62 For i = 0 To secondArray.GetUpperBound(0) 63 Console.Write(secondArray(i) & " ") 64 Next ' pass secondArray using ByRef 67 SecondDouble(secondArray) 68 De IS – operator test of firstArray en firstArrayCopy naar hetzelfde object wijzen.

51 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Console.Write(vbCrLf & "Contents of secondArray " & _ 70 "after calling SecondDouble: ") ' print contents of secondArray after procedure call 73 For i = 0 To secondArray.GetUpperBound(0) 74 Console.Write(secondArray(i) & " ") 75 Next ' test whether the reference was changed by SecondDouble 78 If secondArray Is secondArrayCopy Then 79 Console.WriteLine(vbCrLf & "The references are " & _ 80 "equal.") 81 Else 82 Console.WriteLine(vbCrLf & "The references are " & _ 83 "not equal.") 84 End If End Sub ' Main ' procedure modifies elements of array and assigns 89 ' new reference (note ByVal) 90 Sub FirstDouble(ByVal array As Integer()) 91 Dim i As Integer ' double each element value 94 For i = 0 To array.GetUpperBound(0) 95 array(i) *= 2 96 Next ' create new reference and assign it to array 99 array = New Integer() {11, 12, 13} 100 End Sub ' FirstDouble 101 Alloceert een nieuwe array, slaat de verwijzing naar die array op in de parameter array. Daar ByVal zal firstArray nog steeds naar hetzelfde object wijzen, maar de waarden van de elementen zijn verdubbeld. Elk element van de array wordt met 2 vermenigvuldigd Reference ByVal

52 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Passing Arrays : ByVal of ByRef 102 ' procedure modifies elements of array and assigns 103 ' new reference (note ByRef) 104 Sub SecondDouble(ByRef array As Integer()) 105 Dim i As Integer ' double contents of array 108 For i = 0 To array.GetUpperBound(0) 109 array(i) *= Next ' create new reference and assign it to array 113 array = New Integer() {11, 12, 13} 114 End Sub ' SecondDouble End Module ' modPassArray Test passing array reference using ByVal. Contents of firstArray before calling FirstDouble: Contents of firstArray after calling FirstDouble: The references are equal. Test passing array reference using ByRef. Contents of secondArray before calling SecondDouble: Contents of secondArray after calling SecondDouble: The references are not equal. Reference is passed ByRefDaar ByRef, kan de procedure de variabele naar een ander object laten wijzen

53 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Multidimensionele Arrays Multidimensional arrays (multiple-subscripted)  Vereisen minimum 2 indexen om een element te identificeren.  De dimensie van een array = het aantal indexen nodig om een element te identificeren Rectangular arrays : 2 dimensionele arrays Dim numbers As Integer(,) = New Integer(,){{1,2},{3,4}} Of Dim numbers As Integer(,) = New Integer(1,1){} numbers(0,0) = 1 numbers(0,1) = 2 numbers(1,0) = 3 numbers(1,1) = 4

54 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Multidimensionele Arrays Dim a As Integer(,) = New Integer(2,3){ } a(0, 2)a(0, 3)a(0, 1)a(0, 0) a(1, 2)a(1, 3)a(1, 1)a(1, 0) a(2, 2)a(2, 3)a(2, 1)a(2, 0) Column 0Column 1Column 2Column 3 Row 0 Row 1 Row 2 Column index Row index (or subscript) Array name

55 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Multidimensionele Arrays Jagged arrays  Een array die andere arrays als elementen bevat  Rijen in jagged arrays kunnen van verschillende lengte zijn Dim jaggedArray As Integer()() jaggedArray = New Integer(1) () {} jaggedArray(0) = New Integer(){1,2} jaggedArray(1) = New Integer()[3,4,5}  Doorlopen van jagged array Dim total, row, column as Integer For row = 0 to jaggedArray.GetUpperBound(0) For column = 0 to jaggedArray(row).GetUpperBound(0) total += jaggedArray (row) (column) Next

56 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' MultidimensionalArrays.vb : ' Initializing multi-dimensional arrays. 2. Imports System.Windows.Forms 3. Module modMultidimensionalArrays 4. Sub Main() 5. Dim output As String 6. Dim i, j As Integer 7. ' create rectangular two-dimensional array 8. Dim array1 As Integer(,) 9. array1 = New Integer(,) {{1, 2, 3}, {4, 5, 6}} 10. ' create jagged two-dimensional array 11. Dim array2 As Integer()() = New Integer(2)() {} 12. array2(0) = New Integer() {1, 2} 13. array2(1) = New Integer() {3} 14. array2(2) = New Integer() {4, 5, 6} output = "Values in array1 by row are " & vbCrLf 17. For i = 0 To array1.GetUpperBound(0) 18. For j = 0 To array1.GetUpperBound(1) 19. output &= array1(i, j) & " " 20. Next 21. output &= vbCrLf 22. Next output &= vbCrLf & "Values in array2 by row are " & vbCrLf 25. For i = 0 To array2.GetUpperBound(0) 26. For j = 0 To array2(i).GetUpperBound(0) 27. output &= array2(i)(j) & " " 28. Next 29. output &= vbCrLf 30. Next MessageBox.Show(output, "Initializing Multi-Dimensional Arrays", _ 33. MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub ' Main End Module ' modMultidimensionalArrays Doorloopt 2 dimensionele array Declaratie en allocatie van jagged array array2 bestaande uit 3 arrays Alloceert array1 met initializers lijsten In een jagged 2dimensionele array is de 2de dimensie eigenlijk de eerste dimensie van een andere array

57 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag For Each/Next herhalingsstructuur Gebruikt om een reeks statements te herhalen voor elk element in de data structuur, zoals een array. Ipv een teller gebruikt For Each/Next een variabele die de waarde van elk element voorstelt

58 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag For Each/Next herhalingsstructuur 1 ' ForEach.vb 2 ' Program uses For Each/Next to find a minimum grade. 3 4 Module modForEach 5 6 Sub Main() 7 Dim gradeArray As Integer(,) = New Integer(,) _ 8 {{77, 68, 86, 73}, {98, 87, 89, 81}, {70, 90, 86, 81}} 9 10 Dim grade As Integer 11 Dim lowGrade As Integer = For Each grade In gradeArray If grade < lowGrade Then 16 lowGrade = grade 17 End If Next Console.WriteLine("The minimum grade is: {0}", lowGrade) 22 End Sub ' Main End Module ' modForEach The minimum grade is: 68 Deze structuur doorloopt sequentieel alle elementen in de array gradeArray, en kent telkens de waarde van het element toe aan de vraiabele grade De waarde van het element wordt vergeleken met lowGrade, die de kleinste graad bijhoudt uit de array.

59 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 59 Oefening Flag Quiz

60 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 60 Oefening Gegeven een 3 dimensionele jagged array met examenscores Dim gradeArray As Integer()() = New Integer(2)() {} ' allocateert elke rij met punten van 4 studenten gradeArray(0) = New Integer() {77, 68, 86, 73} gradeArray(1) = New Integer() {98, 87, 89, 81} gradeArray(2) = New Integer() {70, 90, 86, 81} Genereer onderstaande output

61 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 61 Alle icoontjes

62 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 62 Klassen diagramma eerste oefening

63 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 63 Sequence diagramma eerste oefening

64 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag By-Value en By-Reference 1 ByRefTest.vb 2 ' Demonstrates passing by reference. 3 4 Module modByRefTest 5 6 ' squares three values ByVal and ByRef, displays results 7 Sub Main() 8 Dim number1 As Integer = Console.WriteLine("Passing a value-type argument by value:") 11 Console.WriteLine("Before calling SquareByValue, " & _ 12 "number1 is {0}", number1) 13 SquareByValue(number1) ' passes number1 by value 14 Console.WriteLine("After returning from SquareByValue, " & _ 15 "number1 is {0}" & vbCrLf, number1) Dim number2 As Integer = Console.WriteLine("Passing a value-type argument" & _ 20 " by reference:") 21 Console.WriteLine("Before calling SquareByReference, " & _ 22 "number2 is {0}", number2) 23 SquareByReference(number2) ' passes number2 by reference 24 Console.WriteLine("After returning from " & _ 25 "SquareByReference, number2 is {0}" & vbCrLf, number2) Dim number3 As Integer = 2 28 Een copie van de waarde wordt doorgegeven aan de procedure Een verwijzing naar de waarde wordt doorgegeven

65 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag By-Value en By-Reference 29 Console.WriteLine("Passing a value-type argument" & _ 30 " by reference, but in parentheses:") 31 Console.WriteLine("Before calling SquareByReference " & _ 32 "using parentheses, number3 is {0}", number3) 33 SquareByReference((number3)) ' passes number3 by value 34 Console.WriteLine("After returning from " & _ 35 "SquareByReference, number3 is {0}", number3) End Sub ' Main ' squares number by value (note ByVal keyword) 40 Sub SquareByValue(ByVal number As Integer) 41 Console.WriteLine("After entering SquareByValue, " & _ 42 "number is {0}", number) 43 number *= number 44 Console.WriteLine("Before exiting SquareByValue, " & _ 45 "number is {0}", number) 46 End Sub ' SquareByValue ' squares number by reference (note ByRef keyword) 49 Sub SquareByReference(ByRef number As Integer) 50 Console.WriteLine("After entering SquareByReference" & _ 51 ", number is {0}", number) 52 number *= number 53 Console.WriteLine("Before exiting SquareByReference" & _ 54 ", number is {0}", number) 55 End Sub ' SquareByReference End Module ' modByRefTest Bij ByVal wordt een copie van de waarde doorgegeven ByRef geeft directe toegang tot de waarde in de originele variabele Het plaatsen van het argument tussen haakjes dwing pass-by- value af

66 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag By-Value en By-Reference Passing a value-type argument by value: Before calling SquareByValue, number1 is 2 After entering SquareByValue, number is 2 Before exiting SquareByValue, number is 4 After returning from SquareByValue, number1 is 2 Passing a value-type argument by reference: Before calling SquareByReference, number2 is 2 After entering SquareByReference, number is 2 Before exiting SquareByReference, number is 4 After returning from SquareByReference, number2 is 4 Passing a value-type argument by reference, but in parentheses: Before calling SquareByReference using parentheses, number3 is 2 After entering SquareByReference, number is 2 Before exiting SquareByReference, number is 4 After returning from SquareByReference, number3 is 2

67 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 67 Oefening 1 GroupBoxPictureBoxes (displaying images)

68 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' CreateArray.vb 2 ' Declaring and allocating an array. 3 4 Imports System.Windows.Forms 5 6 Module modCreateArray 7 8 Sub Main() 9 Dim output As String 10 Dim i As Integer Dim array As Integer() ' declare array variable 13 array = New Integer(9) {} ' allocate memory for array output &= "Subscript " & vbTab & "Value" & vbCrLf ' display values in array 18 For i = 0 To array.GetUpperBound(0) 19 output &= i & vbTab & array(i) & vbCrLf 20 Next output &= vbCrLf & "The array contains " & _ 23 array.Length & " elements." MessageBox.Show(output, "Array of Integer Values", _ 26 MessageBoxButtons.OK, MessageBoxIcon.Information) 27 End Sub ' Main 28 End Module ' modCreateArray 4.15 Arrays Voorbeeld : delaratie en allocatie van geheugen Alloceert geheugen voor een array van 10 elementen gebruik makend van New en kent dit toe aan array Een variabel die een reference kan opslaan naar een array van Integer elementen Voegt aan output de kolomheadings toe van de tabel die zal getoond worden For structuur voegt index en waarde van elk array element toe aan de variabele output De length property retourneert aantal elementen in array

69 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 69 Oefening 2

70 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag Doorgeven van array aan procedure 1 ' PassArray.vb 2 ' Passing arrays and individual array elements to procedures. 3 4 Imports System.Windows.Forms 5 6 Module modPassArray 7 Dim output As String 8 9 Sub Main() 10 Dim array1 As Integer() = New Integer() {1, 2, 3, 4, 5} 11 Dim i As Integer output = "EFFECTS OF PASSING ENTIRE ARRAY " & _ 14 "BY REFERENCE:" & vbCrLf & vbCrLf & _ 15 "The values of the original array are:" & vbCrLf ' display original elements of array1 18 For i = 0 To array1.GetUpperBound(0) 19 output &= " " & array1(i) 20 Next ModifyArray(array1) ' array is passed by reference output &= vbCrLf & _ 25 "The values of the modified array are:" & vbCrLf ' display modified elements of array1 28 For i = 0 To array1.GetUpperBound(0) 29 output &= " " & array1(i) 30 Next 31 Voegt de 5 elementen van array1 toe aan de String output Geeft array1 door aan de procedure ModifyArray via ByRef Voegt de 5 elementen van array1 toe aan de String output

71 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag output &= vbCrLf & vbCrLf & _ 33 "EFFECTS OF PASSING ARRAY ELEMENT " & _ 34 "BY VALUE:" & vbCrLf & vbCrLf & "array1(3) " & _ 35 "before ModifyElementByVal: " & array1(3) ' array element passed by value 38 ModifyElementByVal(array1(3)) output &= vbCrLf & "array1(3) after " & _ 41 "ModifyElementByVal: " & array1(3) output &= vbCrLf & vbCrLf & "EFFECTS OF PASSING " & _ 44 "ARRAY ELEMENT BY REFERENCE: " & vbCrLf & vbCrLf & _ 45 "array1(3) before ModifyElementByRef: " & array1(3) ' array element passed by reference 48 ModifyElementByRef(array1(3)) output &= vbCrLf & "array1(3) after " & _ 51 "ModifyElementByRef: " & array1(3) MessageBox.Show(output, "Passing Arrays", _ 54 MessageBoxButtons.OK, MessageBoxIcon.Information) 55 End Sub ' Main ' procedure modifies array it receives (note ByVal) 58 Sub ModifyArray(ByVal arrayParameter As Integer()) 59 Dim j As Integer For j = 0 To arrayParameter.GetUpperBound(0) 62 arrayParameter(j) *= 2 63 Next End Sub ' ModifyArray 66 Vermenigvuldigd de elementen van arrayParameter met 2

72 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag ' procedure modifies integer passed to it 68 ' original is not be modified (note ByVal) 69 Sub ModifyElementByVal(ByVal element As Integer) output &= vbCrLf & "Value received in " & _ 72 "ModifyElementByVal: " & element 73 element *= 2 74 output &= vbCrLf & "Value calculated in " & _ 75 "ModifyElementByVal: " & element 76 End Sub ' ModifyElementByVal ' procedure modifies integer passed to it 79 ' original is be modified (note ByRef) 80 Sub ModifyElementByRef(ByRef element As Integer) output &= vbCrLf & "Value received in " & _ 83 "ModifyElementByRef: " & element 84 element *= 2 85 output &= vbCrLf & "Value calculated in " & _ 86 "ModifyElementByRef: " & element 87 End Sub ' ModifyElementByRef End Module ' modPassArray Vermenigvuldigd een elementen met 2 - Byval Vermenigvuldigd een elementen met 2 - ByRef


Download ppt "Visual Basic.NETPag.1 Hoofdstuk 4 - Procedures en arrays Inleiding Modules, Klassen en Procedures Sub procedures Function procedures Methoden Argument."

Verwante presentaties


Ads door Google