Visual Basic .NET Language
Deklarowanie zmiennych
Szukaj…
Składnia
- Licznik publiczny jako liczba całkowita
- Prywatny _counter As Integer
- Dim counter As Integer
Deklarowanie i przypisywanie zmiennej przy użyciu typu pierwotnego
Zmienne w języku Visual Basic są deklarowane przy użyciu słowa kluczowego Dim
. Na przykład deklaruje nową zmienną o nazwie counter
z typem danych Integer
:
Dim counter As Integer
Deklaracja zmienna może również zawierać modyfikator dostępu , taki jak Public
, Protected
, Friend
lub Private
. Działa to w połączeniu z zakresem zmiennej, aby określić jej dostępność.
Modyfikator dostępu | Znaczenie |
---|---|
Publiczny | Wszystkie typy, które mogą uzyskać dostęp do typu obejmującego |
Chroniony | Tylko klasa otaczająca i dziedziczące po niej |
Przyjaciel | Wszystkie typy w tym samym zestawie, które mają dostęp do typu zamykającego |
Chroniony przyjaciel | Klasa obejmująca i jej spadkobiercy lub typy w tym samym zestawie, które mogą uzyskać dostęp do klasy zamykającej |
Prywatny | Tylko typ załączający |
Statyczny | Tylko w przypadku zmiennych lokalnych i inicjuje się tylko raz. |
Krótko mówiąc, słowo kluczowe Dim
można zastąpić modyfikatorem dostępu w deklaracji zmiennej:
Public TotalItems As Integer
Private counter As Integer
Obsługiwane typy danych są przedstawione w poniższej tabeli:
Rodzaj | Alias | Przydział pamięci | Przykład |
---|---|---|---|
SByte | Nie dotyczy | 1 bajt | Dim example As SByte = 10 |
Int16 | Krótki | 2 bajty | Dim example As Short = 10 |
Int32 | Liczba całkowita | 4 bajty | Dim example As Integer = 10 |
Int64 | Długo | 8 bajtów | Dim example As Long = 10 |
Pojedynczy | Nie dotyczy | 4 bajty | Dim example As Single = 10.95 |
Podwójnie | Nie dotyczy | 8 bajtów | Dim example As Double = 10.95 |
Dziesiętny | Nie dotyczy | 16 bajtów | Dim example As Decimal = 10.95 |
Boolean | Nie dotyczy | Podyktowane wdrożeniem platformy | Dim example As Boolean = True |
Zwęglać | Nie dotyczy | 2 bajty | Dim example As Char = "A"C |
Strunowy | Nie dotyczy | źródło | Dim example As String = "Stack Overflow" |
Data i godzina | Data | 8 bajtów | Dim example As Date = Date.Now |
Bajt | Nie dotyczy | 1 bajt | Dim example As Byte = 10 |
UInt16 | UShort | 2 bajty | Dim example As UShort = 10 |
UInt32 | UInteger | 4 bajty | Dim example As UInteger = 10 |
UInt64 | ULong | 8 bajtów | Dim example As ULong = 10 |
Obiekt | Nie dotyczy | 4 bajty, architektura 32-bitowa, 8 bajtów, architektura 64-bitowa | Dim example As Object = Nothing |
Istnieją również identyfikator danych i znaki literału, które można zastąpić typem tekstowym i / lub wymusić literał:
Typ (lub Alias) | Znak typu identyfikatora | Dosłowny znak typu |
---|---|---|
Krótki | Nie dotyczy | example = 10S |
Liczba całkowita | Dim example% | example = 10% lub example = 10I |
Długo | Dim example& | example = 10& lub example = 10L |
Pojedynczy | Dim example! | example = 10! lub example = 10F |
Podwójnie | Dim example# | example = 10# lub example = 10R |
Dziesiętny | Dim example@ | example = 10@ lub example = 10D |
Zwęglać | Nie dotyczy | example = "A"C |
Strunowy | Dim example$ | Nie dotyczy |
UShort | Nie dotyczy | example = 10US |
UInteger | Nie dotyczy | example = 10UI |
ULong | Nie dotyczy | example = 10UL |
Zintegrowane sufiksy można również stosować z prefiksami szesnastkowymi (i H) lub ósemkowymi (i O):
example = &H8000S
lub example = &O77&
Obiekty daty (godziny) można również zdefiniować za pomocą składni literalnej:
Dim example As Date = #7/26/2016 12:8 PM#
Gdy zmienna jest zadeklarowana będzie istnieć w zakres tego typu, zawierającej Sub
lub Function
zadeklarowanej, jako przykład:
Public Function IncrementCounter() As Integer
Dim counter As Integer = 0
counter += 1
Return counter
End Function
Zmienna licznika będzie istnieć tylko do momentu End Function
a następnie będzie poza zakresem. Jeśli ta zmienna licznika jest potrzebna poza funkcją, będziesz musiał zdefiniować ją na poziomie klasy / struktury lub modułu.
Public Class ExampleClass
Private _counter As Integer
Public Function IncrementCounter() As Integer
_counter += 1
Return _counter
End Function
End Class
Alternatywnie można użyć modyfikatora Static
(nie mylić ze Shared
), aby umożliwić zmiennej lokalnej zachowanie wartości między wywołaniami jej metody otaczającej:
Function IncrementCounter() As Integer
Static counter As Integer = 0
counter += 1
Return counter
End Function
Poziomy deklaracji - zmienne lokalne i członkowskie
Zmienne lokalne - Te zadeklarowane w ramach procedury (podprogramu lub funkcji) klasy (lub innej struktury). W tym przykładzie exampleLocalVariable
jest zmienną lokalną zadeklarowaną w funkcji ExampleFunction()
:
Public Class ExampleClass1
Public Function ExampleFunction() As Integer
Dim exampleLocalVariable As Integer = 3
Return exampleLocalVariable
End Function
End Class
Static
kluczowe Static
pozwala zachować zmienną lokalną i zachować jej wartość po zakończeniu (gdzie zwykle zmienne lokalne przestają istnieć po zakończeniu procedury zawierającej).
W tym przykładzie konsola to 024
. Przy każdym wywołaniu ExampleSub()
z Main()
zmienna statyczna zachowuje wartość, którą miała na końcu poprzedniego wywołania:
Module Module1
Sub Main()
ExampleSub()
ExampleSub()
ExampleSub()
End Sub
Public Sub ExampleSub()
Static exampleStaticLocalVariable As Integer = 0
Console.Write(exampleStaticLocalVariable.ToString)
exampleStaticLocalVariable += 2
End Sub
End Module
Zmienne składowe - Zadeklarowane poza jakąkolwiek procedurą, na poziomie klasy (lub innej struktury). Mogą to być zmienne instancji , w których każda instancja klasy zawierającej ma własną odrębną kopię tej zmiennej, lub zmienne Shared
, które istnieją jako pojedyncza zmienna powiązana z samą klasą, niezależnie od dowolnej instancji.
Tutaj ExampleClass2
zawiera dwie zmienne ExampleClass2
. Każde wystąpienie ExampleClass2
ma indywidualną ExampleInstanceVariable
której można uzyskać dostęp za pośrednictwem odwołania do klasy. Dostęp do wspólnej zmiennej ExampleSharedVariable
można uzyskać za pomocą nazwy klasy:
Module Module1
Sub Main()
Dim instance1 As ExampleClass4 = New ExampleClass4
instance1.ExampleInstanceVariable = "Foo"
Dim instance2 As ExampleClass4 = New ExampleClass4
instance2.ExampleInstanceVariable = "Bar"
Console.WriteLine(instance1.ExampleInstanceVariable)
Console.WriteLine(instance2.ExampleInstanceVariable)
Console.WriteLine(ExampleClass4.ExampleSharedVariable)
End Sub
Public Class ExampleClass4
Public ExampleInstanceVariable As String
Public Shared ExampleSharedVariable As String = "FizzBuzz"
End Class
End Module
Przykład modyfikatorów dostępu
W poniższym przykładzie rozważmy rozwiązanie dla dwóch projektów: ConsoleApplication1 i SampleClassLibrary . Pierwszy projekt będzie miał klasy SampleClass1 i SampleClass2 . Drugi będzie miał SampleClass3 i SampleClass4 . Innymi słowy, mamy dwa zestawy z dwoma klasami każdy. ConsoleApplication1 ma odniesienie do SampleClassLibrary .
Zobacz, jak SampleClass1.MethodA wchodzi w interakcje z innymi klasami i metodami.
SampleClass1.vb:
Imports SampleClassLibrary Public Class SampleClass1 Public Sub MethodA() 'MethodA can call any of the following methods because 'they all are in the same scope. MethodB() MethodC() MethodD() MethodE() 'Sample2 is defined as friend. It is accessible within 'the type itself and all namespaces and code within the same assembly. Dim class2 As New SampleClass2() class2.MethodA() 'class2.MethodB() 'SampleClass2.MethodB is not accessible because 'this method is private. SampleClass2.MethodB 'can only be called from SampleClass2.MethodA, 'SampleClass2.MethodC, SampleClass2.MethodD 'and SampleClass2.MethodE class2.MethodC() 'class2.MethodD() 'SampleClass2.MethodD is not accessible because 'this method is protected. SampleClass2.MethodD 'can only be called from any class that inherits 'SampleClass2, SampleClass2.MethodA, SampleClass2.MethodC, 'SampleClass2.MethodD and SampleClass2.MethodE class2.MethodE() Dim class3 As New SampleClass3() 'SampleClass3 resides in other 'assembly and is defined as public. 'It is accessible anywhere. class3.MethodA() 'class3.MethodB() 'SampleClass3.MethodB is not accessible because 'this method is private. SampleClass3.MethodB can 'only be called from SampleClass3.MethodA, 'SampleClass3.MethodC, SampleClass3.MethodD 'and SampleClass3.MethodE 'class3.MethodC() 'SampleClass3.MethodC is not accessible because 'this method is friend and resides in another assembly. 'SampleClass3.MethodC can only be called anywhere from the 'same assembly, SampleClass3.MethodA, SampleClass3.MethodB, 'SampleClass3.MethodD and SampleClass3.MethodE 'class4.MethodD() 'SampleClass3.MethodE is not accessible because 'this method is protected friend. SampleClass3.MethodD 'can only be called from any class that resides inside 'the same assembly and inherits SampleClass3, 'SampleClass3.MethodA, SampleClass3.MethodB, 'SampleClass3.MethodC and SampleClass3.MethodD 'Dim class4 As New SampleClass4() 'SampleClass4 is not accessible because 'it is defined as friend and resides in 'other assembly. End Sub Private Sub MethodB() 'Doing MethodB stuff... End Sub Friend Sub MethodC() 'Doing MethodC stuff... End Sub Protected Sub MethodD() 'Doing MethodD stuff... End Sub Protected Friend Sub MethodE() 'Doing MethodE stuff... End Sub End Class
SampleClass2.vb:
Friend Class SampleClass2 Public Sub MethodA() 'Doing MethodA stuff... End Sub Private Sub MethodB() 'Doing MethodB stuff... End Sub Friend Sub MethodC() 'Doing MethodC stuff... End Sub Protected Sub MethodD() 'Doing MethodD stuff... End Sub Protected Friend Sub MethodE() 'Doing MethodE stuff... End Sub End Class
SampleClass3.vb:
Public Class SampleClass3 Public Sub MethodA() 'Doing MethodA stuff... End Sub Private Sub MethodB() 'Doing MethodB stuff... End Sub Friend Sub MethodC() 'Doing MethodC stuff... End Sub Protected Sub MethodD() 'Doing MethodD stuff... End Sub Protected Friend Sub MethodE() 'Doing MethodE stuff... End Sub End Class
SampleClass4.vb:
Friend Class SampleClass4 Public Sub MethodA() 'Doing MethodA stuff... End Sub Private Sub MethodB() 'Doing MethodB stuff... End Sub Friend Sub MethodC() 'Doing MethodC stuff... End Sub Protected Sub MethodD() 'Doing MethodD stuff... End Sub Protected Friend Sub MethodE() 'Doing MethodE stuff... End Sub End Class