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. 2 4.1 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. 3 4.2 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) 13 14 Console.ReadLine() ' prevent window from closing 15 End Sub ' Main 16 23 24 End Module ' modPayment 17 ' print amount of money earned in command window 18 Sub PrintPay(ByVal hours As Double, ByVal wage As Decimal) 19 20 ' 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 $420.00 The payment is $826.50 The payment is $260.00 The payment is $700.00 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. 5 4.3 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. 6 4.3 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. 7 4.4 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. 8 4.4 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. 9 24 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) 10 11 ' square numbers from 1 to 10 12 For i = 1 To 10 13 Console.WriteLine(i & vbTab & Square(i)) 14 Next 15 18 ' 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 23 4.4 Function Procedure Voorbeeld : berekenen machtsverheffing Het Return statement beëindigt de uitvoering van de procedure en retourneert het resultaat y ^ 2 Number Square 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100

10 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 10 4.5 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. 11 4.5 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 11 12 ' displays result 13 Friend WithEvents lblMaximum As System.Windows.Forms.Label 14 15 ' 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 19 20 ' reads inputs and calculate results 21 Friend WithEvents cmdMaximum As System.Windows.Forms.Button 22 23 ' 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. 12 4.5 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 30 31 value1 = txtFirst.Text 32 value2 = txtSecond.Text 33 value3 = txtThird.Text 34 35 lblMaximum.Text = Maximum(value1, value2, value3) 36 End Sub ' cmdMaximum_Click 37 38 ' find maximum of three parameter values 39 Function Maximum(ByVal valueOne As Double, _ 40 ByVal valueTwo As Double, ByVal valueThree As Double) 41 42 Return Math.Max(Math.Max(valueOne, valueTwo), valueThree) 43 End Function ' Maximum 44 45 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. 15 4.6 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. 16 4.6 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. 17 4.7 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. 18 4.7 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. 19 4.8 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. 20 4.8 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. 21 4.8 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. 22 4.9 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. 23 4.9 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 = 2 10. 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 = 2 14. 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. 24 4.10 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. 25 4.11 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. 26 1 ' 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 10 11 ' instance variable can be used anywhere in class 12 Dim value As Integer = 1 13 14 ' 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 17 18 ' variable local to FrmScoping_Load hides instance variable 19 Dim value As Integer = 5 20 21 lblOutput.Text = "local variable value in" & _ 22 " FrmScoping_Load is " & value 23 24 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 28 29 lblOutput.Text &= vbCrLf & vbCrLf & "local variable " & _ 30 "value in CScoping_Load is " & value 31 End Sub ' FrmScoping_Load 32 33 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 36 37 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 43 44 ' uses instance variable value 45 Sub MethodB() 46 lblOutput.Text &= vbCrLf & vbCrLf & "instance variable" & _ 47 " value is " & value & " after entering MethodB" 48 value *= 10 49 lblOutput.Text &= vbCrLf & "instance variable " & _ 50 "value is " & value & " before exiting MethodB" 51 End Sub ' MethodB 52 53 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. 28 4.12 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. 29 4.12 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 12 13 Friend WithEvents cmdCalculate As Button ' generates output 14 15 ' Visual Studio.NET generated code 16 17 Private Sub cmdCalculate_Click(ByVal sender As System.Object, _ 18 ByVal e As System.EventArgs) Handles cmdCalculate.Click 19 20 Dim value As Integer = Convert.ToInt32(txtInput.Text) 21 Dim i As Integer 22 Dim output As String 23 24 txtDisplay.Text = "" 25 26 For i = 0 To value 27 txtDisplay.Text &= i & "! = " & Factorial(i) & vbCrLf 28 Next 29 30 End Sub ' cmdCalculate_Click Conversie van String naar Integer

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

31 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 31 4.13.1 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. 32 1 ' 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 10 11 Private Sub FrmOverload_Load(ByVal sender As System.Object, _ 12 ByVal e As System.EventArgs) Handles MyBase.Load 13 14 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 18 19 Function Square(ByVal value As Integer) As Integer 20 Return Convert.ToInt32(value ^ 2) 21 End Function ' Square 22 23 Function Square(ByVal value As Double) As Double 24 Return value ^ 2 25 End Function ' Square 26 27 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. 33 1 ' 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 11 12 Private Sub FrmOverload2_Load(ByVal sender As System.Object, _ 13 ByVal e As System.EventArgs) Handles MyBase.Load 14 15 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 19 20 Function Square(ByVal value As Double) As Integer 21 Return Convert.ToInt32(value ^ 2) 22 End Function ' Square 23 24 Function Square(ByVal value As Double) As Double 25 Return value ^ 2 26 End Function ' Square 27 28 End Class ' FrmOverload2 Procedure calls kunnen niet onderscheiden worden o.b.v. return type Syntax fout

34 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 34 4.13.2 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. 35 4.13.2 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. 36 4.13.2 Optionele parameters  We bekijken eerst de functie Power 36 37 ' use iteration to calculate power 38 Function Power(ByVal base As Integer, _ 39 Optional ByVal exponent As Integer = 2) As Integer 40 41 Dim total As Integer = 1 42 Dim i As Integer 43 44 For i = 1 To exponent 45 total *= base 46 Next 47 48 Return total 49 End Function ' Power 50 51 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. 37 1 ' 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 11 12 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 15 16 Friend WithEvents cmdCalculate As Button ' generates output 17 18 ' Visual Studio.NET generated code 19 20 ' reads input and displays result 21 Private Sub cmdCalculate_Click(ByVal sender As System.Object, _ 22 ByVal e As System.EventArgs) Handles cmdCalculate.Click 23 24 Dim value As Integer 25 26 ' 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 33 34 lblOutput.Text = Convert.ToString(value) 35 End Sub ' cmdCalculate_Click Bepaalt of txtPower een waarde bevat

38 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 38 4.14 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. 39 1 ' 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 14 15 ' die summation procedure 16 Function RollAndSum(ByVal diceNumber As Integer) _ 17 As Integer 18 19 Dim i As Integer 20 Dim sum As Integer = 0 21 22 For i = 1 To diceNumber 23 sum += RollDie() 24 Next 25 26 Return sum 27End Function ' RollAndSum 28 29 ' returns die image 30 Function GetDieImage(ByVal dieValue As Integer, _ 31 Optional ByVal baseImageName As String = "die") _ 32 As System.Drawing.Image 33 34 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. 40 4.14 Modules GroupBox PictureBox Button Label

41 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 41 1 ' 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 16 17 Private Sub cmdRollDie1_Click(ByVal sender As System.Object, _ 18 ByVal e As System.EventArgs) Handles cmdRollDie1.Click 19 20 picDie1.Image = modDice.GetDieImage(modDice.RollDie()) 21 End Sub ' cmdRollDie1_Click 22 23 Private Sub cmdRollDie2_Click(ByVal sender As System.Object, _ 24 ByVal e As System.EventArgs) Handles cmdRollDie2.Click 25 26 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 30 31 lblSum.Text = Convert.ToString(modDice.RollAndSum(10)) 32 End Sub ' cmdRollTen_Click 33 34 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. 42 4.15 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. 43 4.15 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. 44 4.15 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. 45 1 ' 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 10 11 ' 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} 15 16 ' allocate array2 based on length of array1 17 array2 = New Integer(array1.GetUpperBound(0)) {} 18 19 ' set values in array2 by a calculation 20 For i = 0 To array2.GetUpperBound(0) 21 array2(i) = 2 + 2 * i 22 Next 23 24 output &= "Subscript " & vbTab & "Array1" & vbTab & _ 25 "Array2" & vbCrLf 26 27 ' 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. 46 4.16Doorgeven 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. 47 4.17 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. 48 4.17 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. 49 1 ' 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() 13 14 ' allocate firstArray and copy its reference 15 firstArray = New Integer() {1, 2, 3} 16 firstArrayCopy = firstArray 17 18 Console.WriteLine("Test passing array reference " & _ 19 "using ByVal.") 20 Console.Write("Contents of firstArray before " & _ 21 "calling FirstDouble: ") 22 23 ' print contents of firstArray 24 For i = 0 To firstArray.GetUpperBound(0) 25 Console.Write(firstArray(i) & " ") 26 Next 27 28 ' pass firstArray using ByVal 29 FirstDouble(firstArray) 30 31 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. 50 34 ' print contents of firstArray 35 For i = 0 To firstArray.GetUpperBound(0) 36 Console.Write(firstArray(i) & " ") 37 Next 38 39 ' 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 47 48 ' declare array references 49 Dim secondArray As Integer() 50 Dim secondArrayCopy As Integer() 51 52 ' allocate secondArray and copy its reference 53 secondArray = New Integer() {1, 2, 3} 54 secondArrayCopy = secondArray 55 56 Console.WriteLine(vbCrLf & "Test passing array " & _ 57 "reference using ByRef.") 58 Console.Write("Contents of secondArray before " & _ 59 "calling SecondDouble: ") 60 61 ' print contents of secondArray before procedure call 62 For i = 0 To secondArray.GetUpperBound(0) 63 Console.Write(secondArray(i) & " ") 64 Next 65 66 ' 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. 51 69 Console.Write(vbCrLf & "Contents of secondArray " & _ 70 "after calling SecondDouble: ") 71 72 ' print contents of secondArray after procedure call 73 For i = 0 To secondArray.GetUpperBound(0) 74 Console.Write(secondArray(i) & " ") 75 Next 76 77 ' 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 85 86 End Sub ' Main 87 88 ' procedure modifies elements of array and assigns 89 ' new reference (note ByVal) 90 Sub FirstDouble(ByVal array As Integer()) 91 Dim i As Integer 92 93 ' double each element value 94 For i = 0 To array.GetUpperBound(0) 95 array(i) *= 2 96 Next 97 98 ' 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. 52 4.17 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 106 107 ' double contents of array 108 For i = 0 To array.GetUpperBound(0) 109 array(i) *= 2 110 Next 111 112 ' create new reference and assign it to array 113 array = New Integer() {11, 12, 13} 114 End Sub ' SecondDouble 115 116 End Module ' modPassArray Test passing array reference using ByVal. Contents of firstArray before calling FirstDouble: 1 2 3 Contents of firstArray after calling FirstDouble: 2 4 6 The references are equal. Test passing array reference using ByRef. Contents of secondArray before calling SecondDouble: 1 2 3 Contents of secondArray after calling SecondDouble: 11 12 13 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. 53 4.18 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. 54 4.18 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. 55 4.18 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. 56 1. ' 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} 15. 16. 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 23. 24. 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 31. 32. MessageBox.Show(output, "Initializing Multi-Dimensional Arrays", _ 33. MessageBoxButtons.OK, MessageBoxIcon.Information) 34. 35. End Sub ' Main 36. 37. 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. 57 4.19 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. 58 4.19 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 = 100 12 13 For Each grade In gradeArray 14 15 If grade < lowGrade Then 16 lowGrade = grade 17 End If 18 19 Next 20 21 Console.WriteLine("The minimum grade is: {0}", lowGrade) 22 End Sub ' Main 23 24 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. 64 4.9 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 = 2 9 10 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) 16 17 Dim number2 As Integer = 2 18 19 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) 26 27 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. 65 4.9 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) 36 37 End Sub ' Main 38 39 ' 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 47 48 ' 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 56 57 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. 66 4.9 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. 68 1 ' 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 11 12 Dim array As Integer() ' declare array variable 13 array = New Integer(9) {} ' allocate memory for array 14 15 output &= "Subscript " & vbTab & "Value" & vbCrLf 16 17 ' display values in array 18 For i = 0 To array.GetUpperBound(0) 19 output &= i & vbTab & array(i) & vbCrLf 20 Next 21 22 output &= vbCrLf & "The array contains " & _ 23 array.Length & " elements." 24 25 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. 70 4.16Doorgeven 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 12 13 output = "EFFECTS OF PASSING ENTIRE ARRAY " & _ 14 "BY REFERENCE:" & vbCrLf & vbCrLf & _ 15 "The values of the original array are:" & vbCrLf 16 17 ' display original elements of array1 18 For i = 0 To array1.GetUpperBound(0) 19 output &= " " & array1(i) 20 Next 21 22 ModifyArray(array1) ' array is passed by reference 23 24 output &= vbCrLf & _ 25 "The values of the modified array are:" & vbCrLf 26 27 ' 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. 71 32 output &= vbCrLf & vbCrLf & _ 33 "EFFECTS OF PASSING ARRAY ELEMENT " & _ 34 "BY VALUE:" & vbCrLf & vbCrLf & "array1(3) " & _ 35 "before ModifyElementByVal: " & array1(3) 36 37 ' array element passed by value 38 ModifyElementByVal(array1(3)) 39 40 output &= vbCrLf & "array1(3) after " & _ 41 "ModifyElementByVal: " & array1(3) 42 43 output &= vbCrLf & vbCrLf & "EFFECTS OF PASSING " & _ 44 "ARRAY ELEMENT BY REFERENCE: " & vbCrLf & vbCrLf & _ 45 "array1(3) before ModifyElementByRef: " & array1(3) 46 47 ' array element passed by reference 48 ModifyElementByRef(array1(3)) 49 50 output &= vbCrLf & "array1(3) after " & _ 51 "ModifyElementByRef: " & array1(3) 52 53 MessageBox.Show(output, "Passing Arrays", _ 54 MessageBoxButtons.OK, MessageBoxIcon.Information) 55 End Sub ' Main 56 57 ' procedure modifies array it receives (note ByVal) 58 Sub ModifyArray(ByVal arrayParameter As Integer()) 59 Dim j As Integer 60 61 For j = 0 To arrayParameter.GetUpperBound(0) 62 arrayParameter(j) *= 2 63 Next 64 65 End Sub ' ModifyArray 66 Vermenigvuldigd de elementen van arrayParameter met 2

72 Hoofdstuk 4 : Procedures en ArraysVisual Basic.NETPag. 72 67 ' procedure modifies integer passed to it 68 ' original is not be modified (note ByVal) 69 Sub ModifyElementByVal(ByVal element As Integer) 70 71 output &= vbCrLf & "Value received in " & _ 72 "ModifyElementByVal: " & element 73 element *= 2 74 output &= vbCrLf & "Value calculated in " & _ 75 "ModifyElementByVal: " & element 76 End Sub ' ModifyElementByVal 77 78 ' procedure modifies integer passed to it 79 ' original is be modified (note ByRef) 80 Sub ModifyElementByRef(ByRef element As Integer) 81 82 output &= vbCrLf & "Value received in " & _ 83 "ModifyElementByRef: " & element 84 element *= 2 85 output &= vbCrLf & "Value calculated in " & _ 86 "ModifyElementByRef: " & element 87 End Sub ' ModifyElementByRef 88 89 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