Sök…


Syntax

  • Offentlig räknare som heltal
  • Privat _counter som heltal
  • Dim räknare som heltal

Förklara och tilldela en variabel med en primitiv typ

Variabler i Visual Basic deklareras med hjälp av nyckelordet Dim . Till exempel förklarar detta en ny variabel som kallas counter med datatypen Integer :

Dim counter As Integer

En variabel deklaration kan också innehålla en åtkomstmodifierare , såsom Public , Protected , Friend eller Private . Detta fungerar tillsammans med variabelns omfattning för att bestämma dess tillgänglighet.

Access Modifier Menande
offentlig Alla typer som har åtkomst till den bifogade typen
Skyddade Endast den medföljande klassen och de som ärver från den
vän Alla typer i samma enhet som har åtkomst till den bifogade typen
Skyddad vän Den inneslutande klassen och dess arvtagare, eller de typer i samma enhet som kan komma åt den bifogade klassen
Privat Endast den medföljande typen
Statisk Endast på lokala variabler och initialiseras endast en gång.

Som en korthet kan nyckelordet Dim ersättas med åtkomstmodifieraren i variabelns deklaration:

Public TotalItems As Integer
Private counter As Integer

De stödda datatyperna visas i tabellen nedan:

Typ Alias Minnesallokering Exempel
SByte N / A 1 byte Dim example As SByte = 10
Int16 Kort 2 byte Dim example As Short = 10
Int32 Heltal 4 bytes Dim example As Integer = 10
Int64 Lång 8 byte Dim example As Long = 10
Enda N / A 4 bytes Dim example As Single = 10.95
Dubbel N / A 8 byte Dim example As Double = 10.95
Decimal N / A 16 byte Dim example As Decimal = 10.95
Boolean N / A Diktat med implementeringsplattform Dim example As Boolean = True
Röding N / A 2 bytes Dim example As Char = "A"C
Sträng N / A formel källa Dim example As String = "Stack Overflow"
Datum Tid Datum 8 bytes Dim example As Date = Date.Now
byte N / A 1 byte Dim example As Byte = 10
uint16 USHORT 2 byte Dim example As UShort = 10
uint32 UInteger 4 bytes Dim example As UInteger = 10
uint64 ULong 8 byte Dim example As ULong = 10
Objekt N / A 4 byte 32 bitars arkitektur, 8 byte 64 bitars arkitektur Dim example As Object = Nothing

Det finns också dataidentifierare och bokstavstyp som kan användas som ersättning för texttyp och eller för att tvinga bokstavstyp:

Typ (eller alias) Tecken för identifieringstyp Bokstavstyp
Kort N / A example = 10S
Heltal Dim example% example = 10% eller example = 10I
Lång Dim example& example = 10& eller example = 10L
Enda Dim example! example = 10! eller example = 10F
Dubbel Dim example# example = 10# eller example = 10R
Decimal Dim example@ example = 10@ eller example = 10D
Röding N / A example = "A"C
Sträng Dim example$ N / A
USHORT N / A example = 10US
UInteger N / A example = 10UI
ULong N / A example = 10UL

De integrerade suffixerna kan också användas med hexadecimala (& H) eller oktala (& O) prefix:
example = &H8000S eller example = &O77&

Date (Time) -objekt kan också definieras med bokstavlig syntax:
Dim example As Date = #7/26/2016 12:8 PM#

När en variabel har deklarerats kommer den att existera inom räckvidden för den innehållande typen, Sub eller Function deklareras, som ett exempel:

Public Function IncrementCounter() As Integer
    Dim counter As Integer = 0
    counter += 1

    Return counter
End Function

Räknarvariabeln kommer endast att existera tills End Function och kommer då att vara utanför räckvidden. Om denna räknarvariabel behövs utanför funktionen måste du definiera den på klass / struktur eller modulenivå.

Public Class ExampleClass

    Private _counter As Integer
   
    Public Function IncrementCounter() As Integer
       _counter += 1
       Return _counter
    End Function

End Class

Alternativt kan du använda Static (inte förväxlas med Shared ) modifieraren för att tillåta en lokal variabel att behålla sitt värde mellan samtal enligt dess bifogande metod:

Function IncrementCounter() As Integer
    Static counter As Integer = 0
    counter += 1

    Return counter
End Function

Deklarationsnivåer - Lokala och medlemsvariabler

Lokala variabler - De som deklareras inom en procedur (subroutin eller funktion) i en klass (eller annan struktur). I detta exempel är exampleLocalVariable en lokal variabel som deklareras inom ExampleFunction() :

Public Class ExampleClass1

    Public Function ExampleFunction() As Integer
        Dim exampleLocalVariable As Integer = 3
        Return exampleLocalVariable
    End Function

End Class

Det Static nyckelordet gör det möjligt att behålla en lokal variabel och behålla dess värde efter avslutad (där vanligtvis upphör lokala variabler att existera när den innehållande proceduren avslutas).

I det här exemplet är konsolen 024 . På varje samtal till ExampleSub() från Main() behåller den statiska variabeln det värde som det hade i slutet av föregående samtal:

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

Medlemsvariabler - Förklaras utanför varje procedur, på klassnivån (eller annan struktur). Det kan vara instansvariabler , i vilka varje instans av den innehållande klassen har sin egen distinkta kopia av den variabeln, eller Shared variabler , som finns som en enda variabel associerad med klassen själv, oberoende av varje instans.

Här innehåller ExampleClass2 två medlemsvariabler. Varje instans av ExampleClass2 har ett individuellt ExampleInstanceVariable som kan nås via klassreferensen. Den delade variabeln ExampleSharedVariable dock åtkomst med klassnamnet:

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

Exempel på åtkomstmodifierare

I följande exempel överväga att du har en lösning som är värd för två projekt: ConsoleApplication1 och SampleClassLibrary . Det första projektet kommer att ha klasserna SampleClass1 och SampleClass2 . Den andra kommer att ha SampleClass3 och SampleClass4 . Med andra ord har vi två församlingar med två klasser vardera. ConsoleApplication1 har en referens till SampleClassLibrary .

Se hur SampleClass1.MethodA interagerar med andra klasser och metoder.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow