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 formuła ź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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow