サーチ…


構文

  • パブリックカウンタAs Integer
  • プライベート_カウンタを整数として
  • Dimカウンタを整数として

プリミティブ型を使用した変数の宣言と割り当て

Visual Basicの変数は、 Dimキーワードを使用して宣言されます。たとえば、これは、データ型がInteger counterという新しい変数を宣言します。

Dim counter As Integer

変数宣言には、 PublicProtectedFriendPrivateなどのアクセス修飾子を含めることもできます 。これは変数のスコープと連動してアクセシビリティを決定します。

アクセス修飾子意味
パブリック 囲みタイプにアクセスできるすべてのタイプ
保護された 囲むクラスとそれを継承するクラスのみ
友人 囲みタイプにアクセスできる同じアセンブリ内のすべての型
保護された友人囲んでいるクラスとその継承、 または同じクラス内のクラスにアクセスできる同じアセンブリ内の型
プライベート 囲みタイプのみ
静的 ローカル変数に対してのみ、一度だけ初期化されます。

省略形として、変数の宣言で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 UShort 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
UShort 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宣言された例として存在します。

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

代わりに、 StaticSharedと混同しないでください)修飾子を使用して、ローカル変数がその囲みメソッドの呼び出しの間に値を保持できるようにすることができます:

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は2つのメンバ変数が含まれています。 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の 2つのプロジェクトをホストするソリューションがあるとします。最初のプロジェクトはSampleClass1SampleClass2というクラスを持ちます。 2番目にはSampleClass3SampleClass4があります。つまり、それぞれ2つのクラスを持つ2つのアセンブリがあります。 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