수색…


통사론

  • 공용 카운터 As Integer
  • 개인 _ 카운터는 정수로
  • 정수로 희미한 카운터

프리미티브 타입을 사용하여 변수 선언 및 지정

Visual Basic의 변수는 Dim 키워드를 사용하여 선언됩니다. 예를 들어, 다음은 Integer 데이터 유형의 counter 라는 새 변수를 선언합니다.

Dim counter As Integer

변수 선언에는 Public , Protected , Friend 또는 Private 과 같은 액세스 수정자가 포함될 수도 있습니다. 이것은 변수의 범위 와 함께 접근성을 결정합니다.

접근 수정 자 의미
공공의 둘러싸는 형태에 액세스 할 수있는 모든 형태
보호 된 둘러싸는 클래스와 그 클래스로부터 상속받은 클래스
친구 둘러싸는 유형에 액세스 할 수있는 동일한 어셈블리의 모든 유형
보호 된 친구 둘러싸는 클래스와 그 상속자, 또는 같은 어셈블리에서 그 둘러싸는 클래스에 접근 할 수있는 타입
은밀한 둘러싸는 유형 만
공전 지역 변수에만 적용되며 한 번만 초기화됩니다.

속기로 Dim 키워드는 변수의 선언에서 액세스 한정자로 바꿀 수 있습니다.

Public TotalItems As Integer
Private counter As Integer

지원되는 데이터 유형은 아래 표에 요약되어 있습니다.

유형 별명 메모리 할당
SByte N / A 1 바이트 Dim example As SByte = 10
Int16 짧은 2 바이트 Dim example As Short = 10
Int32 정수 4 바이트 Dim example As Integer = 10
Int64 8 바이트 Dim example As Long = 10
단일 N / A 4 바이트 Dim example As Single = 10.95
더블 N / A 8 바이트 Dim example As Double = 10.95
소수 N / A 16 바이트 Dim example As Decimal = 10.95
부울 N / A 플랫폼 구현에 의해 지시 됨 Dim example As Boolean = True
N / A 2 바이트 Dim example As Char = "A"C
N / A 공식 출처 Dim example As String = "Stack Overflow"
날짜 시간 날짜 8 바이트 Dim example As Date = Date.Now
바이트 N / A 1 바이트 Dim example As Byte = 10
UInt16 권장 사항 2 바이트 Dim example As UShort = 10
UInt32 UInteger 4 바이트 Dim example As UInteger = 10
UInt64 울롱 8 바이트 Dim example As ULong = 10
목적 N / A 4 바이트 32 비트 아키텍처, 8 바이트 64 비트 아키텍처 Dim example As Object = Nothing

또한 텍스트 식별자와 리터럴 타입을 대체 할 수있는 데이터 식별자와 리터럴 타입 문자가 존재합니다 :

유형 (또는 별칭) 식별자 유형 문자 리터럴 유형 문자
짧은 N / A example = 10S
정수 Dim example% example = 10% 또는 example = 10I
Dim example& example = 10& 또는 example = 10L
단일 Dim example! example = 10! 또는 example = 10F
더블 Dim example# example = 10# 또는 example = 10R
소수 Dim example@ example = 10@ 또는 example = 10D
N / A example = "A"C
Dim example$ N / A
권장 사항 N / A example = 10US
UInteger N / A example = 10UI
울롱 N / A example = 10UL

정수 접미사는 16 진수 (& H) 또는 8 진수 (& O) 접두어로 사용할 수도 있습니다.
example = &H8000S 또는 example = &O77&

Date (Time) 객체는 리터럴 구문을 사용하여 정의 할 수도 있습니다.
Dim example As Date = #7/26/2016 12:8 PM#

변수가 선언되면 Sub 또는 Function 선언 된 포함 유형의 Scope 내에 존재합니다.

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

    Return counter
End Function

카운터 변수는 End Function 까지만 존재하며 범위를 벗어납니다. 이 카운터 변수가 함수 외부에서 필요하면 클래스 / 구조 또는 모듈 수준에서 정의해야합니다.

Public Class ExampleClass

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

End Class

또는 Static ( Shared 와 혼동해서는 안 됨) 한정자를 사용하여 로컬 변수가 그 둘러싸는 메소드의 호출간에 값을 유지하도록 할 수 있습니다.

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

    Return counter
End Function

선언 수준 - 로컬 및 멤버 변수

로컬 변수 - 클래스 (또는 다른 구조체)의 프로 시저 (서브 루틴 또는 함수) 내에서 선언 된 변수 입니다. 이 예제에서 exampleLocalVariableExampleFunction() 내에서 선언 된 지역 변수입니다.

Public Class ExampleClass1

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

End Class

Static 키워드를 사용하면 지역 변수를 유지하고 종료 후 값을 유지할 수 있습니다 (일반적으로 포함하는 프로 시저가 종료 될 때 지역 변수가 존재하지 않는 경우).

이 예에서 콘솔은 024 입니다. Main() ExampleSub() 에서 ExampleSub() 을 호출 할 때마다 정적 변수는 이전 호출이 끝날 때의 값을 유지합니다.

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

멤버 변수 - 프로 시저 외부에서 클래스 또는 다른 구조 수준으로 선언됩니다. 그들은 함유 클래스의 각 인스턴스는 그 변수, 또는 자체의 고유 카피가있는 인스턴스 변수 일 수있다 Shared 인스턴스 독립적 클래스 자체와 연관된 하나의 변수로서 존재할 변수.

여기서 ExampleClass2 는 두 개의 멤버 변수를 포함합니다. ExampleClass2 의 각 인스턴스에는 클래스 참조를 통해 액세스 할 수있는 개별 ExampleInstanceVariable 이 있습니다. 그러나 공유 변수 ExampleSharedVariable 은 클래스 이름을 사용하여 액세스됩니다.

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

액세스 한정자의 예

다음 예제에서는 ConsoleApplication1SampleClassLibrary 라는 두 개의 프로젝트를 호스팅하는 솔루션이 있다고 가정합니다. 첫 번째 프로젝트에는 SampleClass1SampleClass2 클래스가 있습니다. 두 번째 샘플 에는 SampleClass3SampleClass4가 있습니다. 다시 말해 우리는 각각 두 개의 클래스가있는 두 개의 어셈블리가 있습니다. ConsoleApplication1 에는 SampleClassLibrary에 대한 참조가 있습니다.

SampleClass1.MethodA 가 다른 클래스 및 메소드와 상호 작용하는 방법을 확인하십시오.

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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow