VB.Net Tutorial/Language Basics/Variable Scope — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 15:54, 26 мая 2010
Содержание
Block scope
<source lang="vbnet">Option Strict On Public Class BlockScope
Public Shared Sub Main() For outerLoop As Integer = 0 to 10000 For innerLoop As Integer = 0 to 10 Dim blockVar As Integer blockVar += 1 If blockVar Mod 1000 = 0 Then Console.WriteLine(blockVar) End If Next Next End Sub
End Class</source>
1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 11000 12000 13000 14000 15000 16000 17000 18000 19000 20000 21000 22000 23000 24000 25000 26000 27000 28000 29000 30000 31000 32000 33000 34000 35000 36000 37000 ...
Define variable inside If statement
<source lang="vbnet">public class Test
public Shared Sub Main Dim manager As Boolean = True If manager Then Dim txt As String = "M" : Console.WriteLine(txt) Else _ Dim txt As String = "E" : Console.WriteLine(txt) End Sub
End class</source>
M
Demonstrates scope rules and instance variables
<source lang="vbnet">Public Class Tester
" instance variable can be used anywhere in class Dim Shared value As Integer = 1 " demonstrates class scope and block scope Public Shared Sub Main Dim value As Integer = 5 Console.WriteLine("local variable value in" & _ " FrmScoping_Load is " & value ) MethodA() " MethodA has automatic local value MethodB() " MethodB uses instance variable value MethodA() " MethodA creates new automatic local value MethodB() " instance variable value retains its value Console.WriteLine("local variable " & _ "value in FrmScoping_Load is " & value ) End Sub " automatic local variable value hides instance variable Shared Sub MethodA() Dim value As Integer = 25 " initialized after each call Console.WriteLine("local variable " & _ "value in MethodA is " & value & " after entering MethodA" ) value += 1 Console.WriteLine("local variable " & _ "value in MethodA is " & value & " before exiting MethodA" ) End Sub " uses instance variable value Shared Sub MethodB() Console.WriteLine("instance variable" & _ " value is " & value & " after entering MethodB" ) value *= 10 Console.WriteLine("instance variable " & _ "value is " & value & " before exiting MethodB" ) End Sub
End Class</source>
local variable value in FrmScoping_Load is 5 local variable value in MethodA is 25 after entering MethodA local variable value in MethodA is 26 before exiting MethodA instance variable value is 1 after entering MethodB instance variable value is 10 before exiting MethodB local variable value in MethodA is 25 after entering MethodA local variable value in MethodA is 26 before exiting MethodA instance variable value is 10 after entering MethodB instance variable value is 100 before exiting MethodB local variable value in FrmScoping_Load is 5
Function local variables
<source lang="vbnet">Module Module1
Sub F() Dim Name As String = "www.vbex.ru" Dim Price As Double = 17.45 Dim I As Integer = 1001 Console.WriteLine("In F") Console.WriteLine("Name: " & Name) Console.WriteLine("Price: " & Price) Console.WriteLine("I: " & I) End Sub Sub FF() Dim Name As String = "string" Dim Price As Double = 49.99 Dim I As Integer = 0 Console.WriteLine("In FF") Console.WriteLine("Name: " & Name) Console.WriteLine("Price: " & Price) Console.WriteLine("I: " & I) End Sub Sub Main() F() Console.WriteLine() FF() End Sub
End Module</source>
In F Name: www.vbex.ru Price: 17.45 I: 1001 In FF Name: string Price: 49.99 I: 0
Local variable shadows global variable with the same name
<source lang="vbnet">Module Module1
Dim Counter As Integer Sub BigLoop() For Counter = 1000 To 1005 " Use global Counter Console.Write(Counter & " ") Next End Sub Sub LittleLoop() Dim Counter As Integer For Counter = 0 To 5 " Use local Counter Console.Write(Counter & " ") Next End Sub Sub Main() Counter = 100 Console.WriteLine("Starting Counter: " & Counter) BigLoop() Console.WriteLine("Counter after BigLoop: " & Counter) LittleLoop() Console.WriteLine("Counter after LittleLoop: " & Counter) If (Counter > 1000) Then Dim Counter As Integer = 0 Console.WriteLine("Counter in If statement: " & Counter) End If Console.WriteLine("Ending Counter: " & Counter) End Sub
End Module</source>
Starting Counter: 100 1000 1001 1002 1003 1004 1005 Counter after BigLoop: 1006 0 1 2 3 4 5 Counter after LittleLoop: 1006 Counter in If statement: 0 Ending Counter: 1006
Module global variable
<source lang="vbnet">Module Module1
Sub Main() For intLoopIndex As Integer = 0 To 5 System.Console.WriteLine(Tracker()) Next intLoopIndex End Sub Dim intCount As Integer Function Tracker() As Integer intCount += 1 Return intCount End Function
End Module</source>
1 2 3 4 5 6
Sub scope
<source lang="vbnet">public class Test
public Shared Sub Main DisplayHowardsName() DisplayStephsName() End Sub Shared Sub DisplayStephsName() Dim myName As String myName = "A" Console.WriteLine(myName) End Sub Shared Sub DisplayHowardsName() Dim myName As String myName = "B" Console.WriteLine(myName) End Sub
End class</source>
B A
Variable block scope
<source lang="vbnet">public class Test
public Shared Sub Main For i As Integer = 1 To 5 Dim j As Integer = 3 If i = j Then Dim M As Integer = i + j Console.WriteLine("M: " & M) Else Dim N As Integer = i * j Console.WriteLine("N: " & N) End If Dim k As Integer = 123 Console.WriteLine("k: " & k) Next i End Sub
End class</source>
N: 3 k: 123 N: 6 k: 123 M: 6 k: 123 N: 12 k: 123 N: 15 k: 123
Variable scope in try catch statement
<source lang="vbnet">public class Test
public Shared Sub Main
Try Dim i As Integer = CInt("bad value") Catch ex As InvalidCastException Dim txt As String = "InvalidCastException" Console.WriteLine(txt) Catch ex As Exception Dim txt As String = "Exception" Console.WriteLine(txt) End Try End Sub
End class</source>
InvalidCastException