2013-06-27T00:38:13の更新内容

programming/vb.net/basics/03_statement_01_choice/index.wiki.txt

current previous
1,5 1,5
 
${smdncms:title,条件分岐のステートメント (If, Select)}
${smdncms:title,条件分岐のステートメント (If, Select)}
~
${smdncms:keywords,ステートメント,条件分岐,分類,If,Else,Then,End If,Select,Case,Exit Select,To}
${smdncms:keywords,ステートメント,条件分岐,If,Else,Select,Case}
 
#navi(..)
#navi(..)
 
ここではVB.NETの条件分岐ステートメントについて見ていきます。
ここではVB.NETの条件分岐ステートメントについて見ていきます。
 

        

        
108,39 108,6
 
i は 2 より大きいです。
i は 2 より大きいです。
 
}}
}}
 

        

        
+
複数の条件式を結合するにはAndAlso演算子およびOrElse演算子を用います。 条件「&var{X};かつ&var{Y};」は「&var{X}; AndAlso &var{Y};」、「&var{X};または&var{Y};」は「&var{X}; OrElse &var{Y};」と記述します。 また、条件の否定にはNot演算子を用います。 条件「&var{X};ではない」は「Not &var{X};」と記述します。
+

          
+
#code(vb,条件式の結合・否定の例){{
+
Dim i As Integer = 3
+

          
+
If 2 <= i AndAlso i < 5 Then
+

          
+
    Console.WriteLine("i は 2以上 かつ 5未満の数値です。")
+

          
+
End If
+

          
+
If i < 5 OrElse 10 <= i Then
+

          
+
    Console.WriteLine("i は 5未満 または 10以上の数値です。")
+

          
+
End If
+

          
+
If Not i = 5 Then
+

          
+
    Console.WriteLine("i は 5 以外の数値です。")
+

          
+
End If
+
}}
+

          
+
#prompt(実行結果){{
+
i は 2以上 かつ 5未満の数値です。
+
i は 5未満 または 10以上の数値です。
+
i は 5 以外の数値です。
+
}}
+

          
+
なお、AndAlso演算子・OrElse演算子はショートサーキットによる評価を行います。 その他、論理演算子の詳細については[[programming/vb.net/basics/02_operator#LogicalOperators]]を参照してください。
+

          
+

          
 
*Select Caseステートメント
*Select Caseステートメント
 
Select Caseステートメントは、ある値に対してその分類を行い、その分類毎に実行するプログラムを変えるための構文です。 構文の形式は次の通りです。
Select Caseステートメントは、ある値に対してその分類を行い、その分類毎に実行するプログラムを変えるための構文です。 構文の形式は次の通りです。
 

        

        
156,7 123,9
 
Case Elseの部分は、どの分類にも当てはまらなかった場合に実行されます。 次のコードは、1から10までの数値について、(奇数ではなく)素数か偶数かに分類するものです。 Forステートメントについては[[programming/vb.net/basics/03_statement_02_loop#ForStatement]]を参照してください。
Case Elseの部分は、どの分類にも当てはまらなかった場合に実行されます。 次のコードは、1から10までの数値について、(奇数ではなく)素数か偶数かに分類するものです。 Forステートメントについては[[programming/vb.net/basics/03_statement_02_loop#ForStatement]]を参照してください。
 

        

        
 
#code(vb){{
#code(vb){{
~
For i As Integer = 1 To 10
Dim i As Integer
-

          
-
For i = 1 To 10
 

        

        
 
    Select Case i
    Select Case i
 

        

        
187,35 156,9
 
10 は偶数です。
10 は偶数です。
 
}}
}}
 

        

        
~
この実行結果から分かるとおり、偶数でも素数でもある2はただ単に素数であるとだけ表示され、偶数であるとは表示されていません。 これは、Select Caseステートメントでは最初に一致する分類があった以降は他の分類と一致するか評価されないためです。 つまり、VB.NETのCaseでは、Cなどのcaseラベルとは異なり''フォールスルーしません''。
この実行結果から分かるとおり、偶数でも素数でもある2はただ単に素数であるとだけ表示されますが、これは最初の分類に引っかかった後はほかの分類に引っかからないからです。 すなわち、VB.NETのCaseはCなどのcaseラベルとは異なりフォールスルーしません。
+

          
+
Select Caseステートメントは、Caseを省略して単にSelectと記述することもできます。 従って、次の二つのSelectステートメントはどちらも同等のものとなります。
+

          
+
#code(vb){{
+
' Caseを省略しない例
+
Select Case i
+

          
+
    Case 2, 4, 6, 8, 10
+
        Console.WriteLine("{0} は偶数です。", i)
+

          
+
    Case Else
+
        Console.WriteLine("{0} は偶数ではありません。", i)
+

          
+
End Select
+

          
+
' Caseを省略した例
+
Select i
+

          
+
    Case 2, 4, 6, 8, 10
+
        Console.WriteLine("{0} は偶数です。", i)
+

          
+
    Case Else
+
        Console.WriteLine("{0} は偶数ではありません。", i)
+

          
+
End Select
+
}}
 

        

        
~
また、Select Caseステートメントは文字列を元にした分類にも使うことが出来ます。
また、Select Caseステートメントは文字列を元にした分類にも使うことが出来ます。 (次の例では、Select CaseのCaseを省略しています)
 

        

        
 
#code(vb){{
#code(vb){{
 
Dim s As String = "ABC"
Dim s As String = "ABC"
234,257 177,4
 
End Select
End Select
 
}}
}}
 

        

        
+
**Case句と条件式
+
Case句では分類したい値をカンマで区切る他にも条件式を記述することができます。 値が''ある範囲にあるかどうか''で分類したい場合は To を使うことができます。 例えば&var{X};以上&var{Y};以下の範囲の値を分類したい場合は &var{X}; To &var{Y}; と記述します。
+

          
+
#code(vb,Toで値を分類する例){{
+
For i  As Integer = 1 To 10
+

          
+
    Select Case i
+

          
+
        Case 2 To 5
+
            Console.WriteLine("{0} は2〜5の値です。", i)
+

          
+
        Case 6 To 9
+
            Console.WriteLine("{0} は6〜9の値です。", i)
+

          
+
        Case Else
+
            Console.WriteLine("{0} は分類されなかった値です。", i)
+

          
+
    End Select
+

          
+
Next
+
}}
+

          
+
#prompt(実行結果){{
+
1 は分類されなかった値です。
+
2 は2〜5の値です。
+
3 は2〜5の値です。
+
4 は2〜5の値です。
+
5 は2〜5の値です。
+
6 は6〜9の値です。
+
7 は6〜9の値です。
+
8 は6〜9の値です。
+
9 は6〜9の値です。
+
10 は分類されなかった値です。
+
}}
+

          
+
[[比較演算子>programming/vb.net/basics/02_operator#ComparisonOperators]]を使って値を分類したい場合は、To の代わりに Is を使うことができます。 例えば&var{X};未満の値を分類したい場合は Is < &var{X}; と記述します。 同様に、&var{X};以外の値を分類したい場合は Is <> &var{X};と記述します。 分類条件はCase句が記述されている順(上から順)に評価されるため、複雑な条件を記述する場合は注意が必要です。
+

          
+
#code(vb,Is + 比較演算子で値を分類する例){{
+
For i  As Integer = 1 To 10
+

          
+
    Select Case i
+

          
+
        Case Is < 5
+
            Console.WriteLine("{0} は5未満の値です。", i)
+

          
+
        Case Is >= 8
+
            Console.WriteLine("{0} は8以上の値です。", i)
+

          
+
        Case Is <> 6
+
            Console.WriteLine("{0} は5以上8未満、かつ6以外の値です。", i)
+

          
+
        Case Else
+
            Console.WriteLine("{0} は分類されなかった値です。", i)
+

          
+
    End Select
+

          
+
Next
+
}}
+

          
+
#prompt(実行結果){{
+
1 は5未満の値です。
+
2 は5未満の値です。
+
3 は5未満の値です。
+
4 は5未満の値です。
+
5 は5以上8未満、かつ6以外の値です。
+
6 は分類されなかった値です。
+
7 は5以上8未満、かつ6以外の値です。
+
8 は8以上の値です。
+
9 は8以上の値です。
+
10 は8以上の値です。
+
}}
+

          
+
To や Is を使った条件式も、カンマで区切ることにより1つのCase句で複数個記述することができます。 ただし、カンマで区切った場合は条件式は左から順に評価され、かつショートサーキットによる評価が行われる点に注意が必要です。 つまり、1つのCase句に複数個の条件式が記述されていて、なおかつその途中に一致する条件式があった場合は、それ以降の条件式は評価されません。
+

          
+
さらに、To や Is では範囲に具体的な数値を指定する代わりに、変数や定数を指定することもできます。
+

          
+
#code(vb,ToおよびIsの条件式に変数の値を使う例){{
+
Dim min As Integer = 3
+
Dim max As Integer = 7
+

          
+
For i  As Integer = 1 To 10
+

          
+
    Select Case i
+

          
+
        Case min To max
+
            Console.WriteLine("{0} は {1} から {2} 以内の値です。", i, min, max)
+

          
+
        Case Else
+
            Console.WriteLine("{0} は {1} から {2} 以外の値です。", i, min, max)
+

          
+
    End Select
+

          
+
Next
+

          
+
Console.WriteLine()
+

          
+
For i  As Integer = 1 To 10
+

          
+
    Select Case i
+

          
+
        Case Is <= min
+
            Console.WriteLine("{0} は {1} 以下の値です。", i, min)
+

          
+
        Case Is >= max
+
            Console.WriteLine("{0} は {1} 以上の値です。", i, max)
+

          
+
        Case Else
+
            Console.WriteLine("{0} は {1} より大きく {2} より小さい値です。", i, min, max)
+

          
+
    End Select
+

          
+
Next
+
}}
+

          
+
#prompt(実行結果){{
+
1 は 3 から 7 以外の値です。
+
2 は 3 から 7 以外の値です。
+
3 は 3 から 7 以内の値です。
+
4 は 3 から 7 以内の値です。
+
5 は 3 から 7 以内の値です。
+
6 は 3 から 7 以内の値です。
+
7 は 3 から 7 以内の値です。
+
8 は 3 から 7 以外の値です。
+
9 は 3 から 7 以外の値です。
+
10 は 3 から 7 以外の値です。
+

          
+
1 は 3 以下の値です。
+
2 は 3 以下の値です。
+
3 は 3 以下の値です。
+
4 は 3 より大きく 7 より小さい値です。
+
5 は 3 より大きく 7 より小さい値です。
+
6 は 3 より大きく 7 より小さい値です。
+
7 は 7 以上の値です。
+
8 は 7 以上の値です。
+
9 は 7 以上の値です。
+
10 は 7 以上の値です。
+
}}
+

          
+
Case句でメソッドを呼び出し、その戻り値をもとに分類することもできます。 以下の例はCase句でメソッドを呼び出す例ですが、このようなSelect Caseステートメントの使用法は読みやすさ・分かりやすさの観点から言えば推奨できるものではありません。 あくまでこういった使用法もできるという1つの例であり、このような場合はSelect CaseではなくIf Elseを使用すべきです。
+

          
+
#code(vb){{
+
Dim str As String = "ABC,123.あいう、123日本語。"
+

          
+
For Each ch As Char In str
+

          
+
    ' 戻り値がTrueになるようなメソッドを分類する
+
    Select Case True
+

          
+
        Case Char.IsLetter(ch)
+
            Console.WriteLine("{0} は文字です", ch)
+

          
+
        Case Char.IsDigit(ch)
+
            Console.WriteLine("{0} は数字です", ch)
+

          
+
        Case Char.IsPunctuation(ch)
+
            Console.WriteLine("{0} は区切り文字です", ch)
+

          
+
        Case Else
+
            Console.WriteLine("{0} はそれ以外の文字", ch)
+

          
+
    End Select
+

          
+
Next
+
}}
+

          
+
#prompt(実行結果){{
+
A は文字です
+
B は文字です
+
C は文字です
+
, は区切り文字です
+
1 は数字です
+
2 は数字です
+
3 は数字です
+
. は区切り文字です
+
あ は文字です
+
い は文字です
+
う は文字です
+
、 は区切り文字です
+
1 は数字です
+
2 は数字です
+
3 は数字です
+
日 は文字です
+
本 は文字です
+
語 は文字です
+
。 は区切り文字です
+
}}
+

          
+
**Exit Selectステートメント
+
Case句による分類後に処理を中断してSelectステートメントから脱出するには、Exit Selectステートメントを使います。
+

          
+
#code(vb,Selectステートメントから脱出する例){{
+
For i As Integer = 1 To 10
+

          
+
    Select Case i
+

          
+
        Case 1 To 7
+
            If i Mod 2 = 0 Then Exit Select
+

          
+
            Console.WriteLine("{0} は1〜7の範囲にある奇数の数値です。", i)
+

          
+
        Case Else
+
            Console.WriteLine("{0} はそれ以外の数値です。", i)
+

          
+
    End Select
+

          
+
Next
+
}}
+

          
+
#prompt(実行結果){{
+
1 は1〜7の範囲にある奇数の数値です。
+
3 は1〜7の範囲にある奇数の数値です。
+
5 は1〜7の範囲にある奇数の数値です。
+
7 は1〜7の範囲にある奇数の数値です。
+
8 はそれ以外の数値です。
+
9 はそれ以外の数値です。
+
10 はそれ以外の数値です。
+
}}
+

          
+
**他のCase句へのジャンプ
+
C#のswitch文ではgoto caseやgoto defaultを使うことで他のラベル(Case句)へジャンプすることができますが、VBではそれに相当する構文は用意されていません。 代わりに通常のGoToステートメントを使用し、他のCase句に設定したラベルへとジャンプさせます。
+

          
+
#code(vb){{
+
For i As Integer = 1 To 10
+

          
+
    Select Case i
+

          
+
        Case 1 To 7
+
            If i Mod 2 = 0 Then GoTo OtherNumber
+

          
+
            Console.WriteLine("{0} は1〜7の範囲にある奇数の数値です。", i)
+

          
+
        Case Else
+
OtherNumber:
+
            Console.WriteLine("{0} はそれ以外の数値です。", i)
+

          
+
    End Select
+

          
+
Next
+
}}
+

          
+
#prompt(実行結果){{
+
1 は1〜7の範囲にある奇数の数値です。
+
2 はそれ以外の数値です。
+
3 は1〜7の範囲にある奇数の数値です。
+
4 はそれ以外の数値です。
+
5 は1〜7の範囲にある奇数の数値です。
+
6 はそれ以外の数値です。
+
7 は1〜7の範囲にある奇数の数値です。
+
8 はそれ以外の数値です。
+
9 はそれ以外の数値です。
+
10 はそれ以外の数値です。
+
}}
+

          
 
#navi(..)
#navi(..)

programming/vb.net/basics/11_accessibility/index.wiki.txt

current previous
1,9 1,7
 
${smdncms:title,アクセス修飾子(Public, Protected, Friend, Private)}
${smdncms:title,アクセス修飾子(Public, Protected, Friend, Private)}
~
${smdncms:keywords,アクセス修飾子,アクセシビリティ,Public,Protected,Friend,Private,入れ子,ネスト,クラス,構造体,メソッド,メンバ}
${smdncms:keywords,アクセス修飾子,アクセシビリティ,Public,Protected,Friend,Private}
 
#navi(..)
#navi(..)
~
''アクセシビリティ''とはメソッド、プロパティ、クラスや構造体などへのアクセス許可の範囲のことを指します。 アクセシビリティの他にも、''可視性''や''スコープ''と呼ばれることもあります。
アクセシビリティとはローカル変数、フィールド(クラス・構造体のメンバ変数)、クラス、モジュールなどのアクセス範囲のことで、それらの要素を使用したり参照したりできる範囲をどの程度に限定するかということを指定します。
+

          
+
クラスのメソッドの呼び出しをクラス内からのみに限定するか、もしくはクラス外からも呼び出せるように公開するか、といったようにアクセス許可の範囲には様々な程度があります。 ''アクセス修飾子''を指定することにより、メンバのアクセシビリティ、すなわちメンバに対するアクセス許可の範囲をどの程度に限定するか・どの範囲まで公開するかを指定することができます。
 

        

        
 
-関連するページ
-関連するページ
 
--[[programming/netfx/classlibrary/0_howtocreate]]
--[[programming/netfx/classlibrary/0_howtocreate]]
11,419 9,88
 
#googleadunit(banner)
#googleadunit(banner)
 

        

        
 
*アクセス修飾子とアクセシビリティ
*アクセス修飾子とアクセシビリティ
~
アクセシビリティを指定するためのものがアクセス修飾子で、PublicやPrivateなどのキーワードがアクセス修飾子にあたります。 例えば次のようなクラスにおいて、Method1はアクセス修飾子Publicが指定されているためクラス外からも呼び出すことができますが、Method2はPrivateであるためクラス外からは呼び出せず、同一クラス内からのみ呼び出せます。
アクセシビリティを指定するためのものがアクセス修飾子で、PublicやPrivateなどのキーワードがアクセス修飾子にあたります。 次の表は、各アクセス修飾子とその概要、適用できる要素をまとめたものです。
+

          
+
#code(vb){{
+
Class Sample
+
  ' アクセス修飾子Publicを指定したメソッド
+
  ' (このメソッドはSampleクラス外からのアクセスも可能)
+
  Public Sub Method1()
+
  End Sub
+

          
+
  ' アクセス修飾子Privateを指定したメソッド
+
  ' (このメソッドはSampleクラス内からのアクセスのみ可能)
+
  Private Sub Method2()
+
  End Sub
+
End Class
+
}}
+

          
+
PublicやPrivate以外にも、アクセス範囲を限定するための様々なアクセス修飾子があります。 アクセス修飾子の種類とその概要は次のとおりです。
+

          
+
|*アクセス修飾子のアクセシビリティ
+
|~アクセス修飾子|~適用されるアクセシビリティ|~詳細|h
+
|~Public|すべての箇所からのアクセスを許可|{{
+
同じプロジェクト内・他のプロジェクトのすべての箇所からのアクセスが可能とするように公開する
+
}}|
+
|~Friend|プロジェクト内からのアクセスのみ許可|{{
+
同じプロジェクト内からのアクセスは可能とするが、他のプロジェクトからのアクセスは不可能とするように公開する
+
(同じプロジェクト内からのアクセスに対してはPublic、他のプロジェクトからのアクセスに対してはPrivateとなる)
+
}}|
+
|~Protected|クラス内、または派生クラスからのアクセスのみ許可|{{
+
同じクラス内および派生クラスからのアクセスは可能とするが、クラス外および継承関係にないクラスからのアクセスは不可能とするように公開する
+
}}|
+
|~Protected Friend|プロジェクト内、クラス内、または派生クラスからのアクセスのみ許可|{{
+
同じクラス内および派生クラス、同じプロジェクト内からのアクセスは可能とするが、他のプロジェクトおよび他のプロジェクトで宣言される派生クラスからのアクセスは不可能とするように公開する
+
(同じプロジェクト内からのアクセスに対してはPublic、他のプロジェクトからのアクセスに対してはProtectedとなる)
+
}}|
+
|~Private|クラス内からのアクセスのみ許可|{{
+
同じクラス内からのアクセスは可能とするが、派生クラスやクラス外からのアクセスは不可能とする
+
(クラス外には一切公開しない)
+
}}|
+

          
+
アクセス修飾子にFriendが設定されているメンバは、同じプロジェクト内(厳密には同じ''アセンブリ'')からのアクセスに対してはPublicと同様にすべての箇所からアクセスすることができますが、他のプロジェクトからはPrivateと同様に一切アクセスすることはできません。 [[クラスライブラリ>programming/netfx/classlibrary]]を作成する際、クラスライブラリ内からのアクセスは許可したいが、クラスライブラリの利用者にはアクセスを許可しないメソッドを作りたい、といった場面でアクセス修飾子Friend(およびProtected Friend)を使うことができます。
+

          
+
具体例については後述する[[FriendとProtected Friendの例>#Friend_ProtectedFriend]]、[[型をPrivate・Protectedにする例>#AccessibilityOfNestedType]]もあわせてご覧ください。
+

          
+
*アクセス修飾子を適用できる対象
+
アクセス修飾子は、クラスやメソッドだけでなくメンバ変数やプロパティ、構造体などにも指定することができます。 ただし、すべてのアクセス修飾子をすべての要素に指定できるわけではなく、対象によっては指定できないアクセス修飾子もあります。
+

          
+
次の表は、各アクセス修飾子とそのアクセス範囲、アクセス修飾子を適用できる要素をまとめたものです。
+

          
+
|*アクセス修飾子を適用できる対象
+
|~アクセス修飾子|>|>|>|>|>|>|~適用できる対象|h
+
|~|~クラス|~構造体|~モジュール|~クラスメンバ|~構造体メンバ|~モジュールメンバ|~ローカル変数|h
+
|~Public|CENTER:○|CENTER:○|CENTER:○|CENTER:○|CENTER:◎|CENTER:○||
+
|~Friend|CENTER:◎|CENTER:◎|CENTER:◎|CENTER:○|CENTER:○|CENTER:○||
+
|~Protected||||CENTER:○||||
+
|~Protected Friend||||CENTER:○||||
+
|~Private|CENTER:○|CENTER:○|CENTER:○|CENTER:◎|CENTER:○|CENTER:◎||
+
|~Dim||||CENTER:○|CENTER:○|CENTER:○|CENTER:○|
+

          
+
表中の◎はアクセス修飾子を指定しなかった場合のデフォルトのアクセシビリティです。 例えば構造体ではメソッドにアクセス修飾子を指定しなかった場合はPublicとして扱われますが、クラスではメソッドにアクセス修飾子を指定しなかった場合はPrivateとして扱われます。
 

        

        
~
Dimは[[ローカル変数の宣言>programming/vb.net/basics/01_variables]]だけでなくクラス・構造体のメンバ変数を宣言する際にも指定することができます。 Dim自体はアクセス修飾子ではありませんが、Dimを使って宣言されたメンバ変数のアクセシビリティはデフォルトと同じ、つまり構造体ではPublic、クラス・モジュールではPrivateで宣言されているのと同じものとして扱われます。
|*アクセス修飾子の対象とアクセシビリティ
-
|~アクセス修飾子|~適用した場合のアクセシビリティ|>|>|>|>|>|>|>|~適用できる対象|h
-
|~|~|~名前空間|~クラス|~構造体|~モジュール|~クラスメンバ|~構造体メンバ|~モジュールメンバ|~ローカル変数|h
-
|~Public|同じプロジェクト、他のプロジェクトからのアクセスが可能|○|○|○|○|○|○&br;(デフォルト)|○|×|
-
|~Protected|同じクラス、そのクラスの派生クラスからのアクセスのみ可能|×|×|×|×|○|×|×|×|
-
|~Friend|同じプロジェクトからのアクセスのみ可能|○&br;(デフォルト)|○&br;(デフォルト)|○&br;(デフォルト)|○&br;(デフォルト)|○|○|○|×|
-
|~Protected Friend|同じプロジェクト、同じクラス、派生クラスのいずれからもアクセス可能|×|×|×|×|○|×|×|×|
-
|~Private|同じモジュール、クラス、または構造体からのみアクセス可能|×|○|○|○|○&br;(デフォルト)|○|○&br;(デフォルト)|×|
-
|~Dim|アクセス修飾子ではないが、フィールド・変数の宣言の際に使用できる|×|×|×|×|○|○|○|○|
 

        

        
~
ローカル変数はメソッド内でのみ有効である(ローカル変数はメソッド外に公開できない)ため、アクセス修飾子を指定することはできません。
この表で、デフォルトと書いてある箇所は、アクセス修飾子を指定しなかった場合のアクセシビリティです。 つまり、アクセス修飾子を指定しない場合、名前空間・クラス・構造体・モジュールのアクセシビリティはFriend、クラス・モジュールのメンバはPrivate、構造体のメンバはPublicになります。
 

        

        
 
*アクセス修飾子の適用例
*アクセス修飾子の適用例
~
次のサンプルはアクセス修飾子の適用とメンバの公開範囲を例示したものです。 詳細はコメントにあるとおりです。
次のサンプルはアクセス修飾子の適用例を、クラスを中心に記述したものです。 詳細はコメントにあるとおりです。
+

          
+
#code(vb,アクセス修飾子の適用例){{
+
' このクラスはプロジェクト外にも公開される
+
Public Class C
+
  ' このメソッドはクラス外にも公開される
+
  Public Sub Method1()
+
  End Sub
+

          
+
  ' このメソッドはクラス内のみに公開される
+
  Private Sub Method2()
+
  End Sub
+

          
+
  ' このメソッドはクラス内のみに公開される (=Private)
+
  Sub Method3()
+
  End Sub
+

          
+
  ' このフィールドはクラス外にも公開される
+
  Public Field1 As Integer
+

          
+
  ' このフィールドはクラス内および派生クラスにのみ公開される
+
  Protected Field2 As Integer
+

          
+
  ' このフィールドはクラス内にのみ公開される
+
  Private Field3 As Integer
+

          
+
  ' このフィールドはクラス内にのみ公開される (=Private)
+
  Dim Field4 As Integer
+
End Class
+

          
+
' この構造体はプロジェクト外には公開されない (=Friend)
+
Structure S
+
  ' このメソッドは構造体外にも公開される
+
  Public Sub Method1()
+
  End Sub
+

          
+
  ' このメソッドは構造体内にのみ公開される
+
  Private Sub Method2()
+
  End Sub
+

          
+
  ' このメソッドは構造体外にも公開される (=Public)
+
  Sub Method3()
+
  End Sub
+

          
+
  ' このフィールドは構造体外にも公開される
+
  Public Field1 As Integer
+

          
+
  ' このフィールドは構造体内にのみ公開される
+
  Private Field2 As Integer
+

          
+
  ' このフィールドは構造体外にも公開される (=Public)
+
  Dim Field3 As Integer
+
End Structure
+

          
+
Class Sample
+
  Shared Sub Main()
+
    Dim c As New C
+

          
+
    ' クラスCのこれらのメンバにはアクセス可能
+
    c.Method1()
+
    c.Field1 = 16
+

          
+
    Dim s As S
+

          
+
    ' 構造体Sのこれらのメンバにはアクセス可能
+
    s.Method1()
+
    s.Method3()
+
    s.Field1 = 42
+
    s.Field3 = 3
+
  End Sub
+
End Class
+
}}
+

          
+
**型のアクセシビリティとメンバの公開範囲
+
メンバの公開範囲は型の公開範囲より広くすることはできません。 例えば、Friendアクセス修飾子が指定されているモジュールの場合、このモジュールはプロジェクト内からしかアクセスできません。 このモジュール内でPublic修飾子を指定したメソッドを宣言したとしても、そのメソッドはモジュール自体と同じくプロジェクト内からしかアクセスできません。
 

        

        
 
#code(vb){{
#code(vb){{
~
' このモジュールはプロジェクト外にも公開される
Class SampleClass
+
Public Module M1
+
  ' このメソッドはプロジェクト外からも呼び出すことができる
+
  Public Sub Method1()
+
  End Sub
+
End Module
 

        

        
~
' このモジュールはプロジェクト外には公開されない
    ' このフィールドはこのクラス内でのみ有効
~
Friend Module M2
    Dim dimField As Integer
+
  ' このメソッドはプロジェクト外から呼び出すことはできない
+
  Public Sub Method1()
+
  End Sub
+

          
+
  ' Method1と以下のMethod2は同じアクセシビリティとなる
+
  Friend Sub Method2()
+
  End Sub
+
End Module
+
}}
 

        

        
~
公開範囲については[[ネストされた型の場合>#AccessibilityOfNestedType]]もあわせてご覧ください。
    ' このフィールドはこのクラス内でのみ有効
-
    Private privateField As Integer
 

        

        
~
*FriendとProtedted Friend [#Friend_ProtectedFriend]
    ' このフィールドはこのクラス内と派生クラスでのみ有効
~
アクセス修飾子FriendとProtected Friendが指定されたメンバは、同じプロジェクト(アセンブリ)内ではどちらもPublicと同様のアクセシビリティを持ちます。
    Protected protectedField As Integer
 

        

        
~
#code(vb,Project1){{
    ' このフィールドはこのクラスの内外で有効
~
Public Class C
    Public publicField As Integer
+
  ' このメソッドはプロジェクト内にのみ公開される
+
  Friend Sub M1()
+
  End Sub
+

          
+
  ' このメソッドはプロジェクト内、および派生クラスにのみ公開される
+
  Protected Friend Sub M2()
+
  End Sub
+

          
+
  ' このメソッドはプロジェクト外にも公開される
+
  Public Sub M3()
+
  End Sub
+
End Class
 

        

        
+
Class X
+
  Sub M()
+
    Dim c As New C
+

          
+
    ' クラスCのメソッドM1およびM2は、同じプロジェクト内から見れば
+
    ' Publicと同様なので呼び出すことができる
+
    c.M1()
+
    c.M2()
+

          
+
    ' 当然、クラスCのメソッドM3も呼び出すことができる
+
    c.M3()
+
  End Sub
+
End Class
+
}}
 

        

        
~
一方で、別のプロジェクト(アセンブリ)からはアクセス修飾子Friendが指定されたメンバはPrivate、Protected Friendが指定されたメンバはProtectedと同様のアクセシビリティとなります。 上記のプロジェクトProject1で定義されているクラスCを使用する別のプロジェクトProject2では、各メソッドのアクセシビリティは次のようになります。
    ' このメソッドはこのクラス内でのみ有効です
-
    Private Sub PrivateMethod()
-
    End Sub
 

        

        
~
#code(vb,Project2){{
    ' このメソッドはこのクラス内と派生クラスでのみ有効
~
Class C1
    Protected Sub ProtectedMethod()
~
  Inherits C ' Project1のクラスCを継承
    End Sub
+

          
+
  Sub M()
+
    ' Project1で定義されているクラスCのメソッドM1はFriendであり、
+
    ' Project2から見るとPrivateなメソッドと同様なので呼び出すことはできない
+
    'M1()
+

          
+
    ' 一方クラスCのメソッドM2はFriend Protectedで、
+
    ' Project2から見るとProtectedなメソッドと同様なので呼び出すことができる
+
    M2()
+

          
+
    ' 当然、クラスCのメソッドM3はPublicであるため呼び出すことができる
+
    M3()
+
  End Sub
+
End Class
 

        

        
~
Class Y
    ' このメソッドはこのクラスの内外で有効です
~
  Sub M()
    Public Sub PublicMethod()
~
    ' Project1で定義されているクラスCはPublicなのでインスタンスを
    End Sub
+
    ' 作成することができる
+
    Dim c As New C
+

          
+
    ' クラスCのメソッドM1、M2はPublicではないので別のプロジェクトから
+
    ' 呼び出すことはできない
+
    'c.M1()
+
    'c.M2()
+

          
+
    ' 一方クラスCのメソッドM3はPublicであるため呼び出すことができる
+
    c.M3()
+
  End Sub
+
End Class
+
}}
+

          
+
*プロパティとアクセシビリティ
+
プロパティでは、SetプロシージャとGetプロシージャで異なるアクセシビリティを設定することができます。 これにより、クラス外からの値の取得は許可するが、値の設定はクラス内のみに限定する、といったプロパティを用意することができます。
 

        

        
+
#code(vb){{
+
Class C
+
  Dim _p as Integer
+

          
+
  Property P As Integer
+
    ' プロパティPへの値の設定はクラス内および派生クラスからのみに限定する
+
    Protected Set (ByVal val As Integer)
+
      _p = val
+
    End Set
+
    ' プロパティPの値の取得はクラス内外両方に許可する
+
    Public Get
+
      Return _p
+
    End Get
+
  End Property
 
End Class
End Class
+
}}
+

          
+
プロパティ宣言自体にアクセス修飾子を指定した場合は、SetプロシージャとGetプロシージャにそのアクセシビリティが適用されます。 プロパティ宣言自体にアクセス修飾子が指定されていても、SetプロシージャまたはGetプロシージャにアクセス修飾子を指定すれば、そのアクセシビリティが適用されます。
 

        

        
~
#code(vb){{
Class DerivedClass
+
Class C
+
  Dim _p as Integer
 

        

        
~
  ' PublicなプロパティPを宣言
    ' SampleClassを継承します
~
  Public Property P As Integer
    Inherits SampleClass
+
    ' Privateが指定されているため、プロパティPへの値の設定はクラス内のみで可能となる
+
    Private Set (ByVal val As Integer)
+
      _p = val
+
    End Set
+
    ' アクセス修飾子が指定されていないため、プロパティPの値の取得はPublicとなる
+
    Get
+
      Return _p
+
    End Get
+
  End Property
+
End Class
+
}}
 

        

        
~
*ネストされた型とPrivate・Protected [#AccessibilityOfNestedType]
    Sub SampleMethod()
+
クラス・構造体・モジュール自体にもPrivateアクセス修飾子を指定することはできますが、名前空間直下に属するものにはPrivateを指定することはできません。 Privateが指定できるのはいずれかの型の中で宣言された型、つまりネストされたクラス・構造体・モジュールのみです。 クラスであれば、これらは入れ子クラス・内部クラス・インナークラスなどと呼ばれます。
 

        

        
~
ネストされた型のメンバを参照できるようにするには、そのメンバにアクセス修飾子PublicもしくはFriendを指定する必要があります。 アクセス修飾子Privateを指定した場合は、ネストされた型の内部のみでしか参照できなくなります。
        ' これらのフィールドにはアクセス可能
-
        protectedField = 0
-
        publicField = 0
 

        

        
~
#code(vb,ネストされた型とアクセシビリティの例){{
        ' これらのメソッドにはアクセス可能
~
Class C
        ProtectedMethod()
~
  ' Publicなインナークラス
        PublicMethod()
+
  Public Class CI1
+
    ' このメソッドはクラス外に公開される
+
    Public Sub M1()
+
    End Sub
+
  End Class
 

        

        
+
  ' Privateなインナークラス
+
  Private Class CI2
+
    ' このメソッドはクラスCI2外に公開される
+
    Public Sub M1()
 
    End Sub
    End Sub
 

        

        
+
    ' このメソッドはクラスCI2外には公開されない
+
    Private Sub M2()
+
    End Sub
+
  End Class
+

          
+
  Sub M()
+
    ' インナークラスCI1は同一クラス内で宣言されているのでインスタンスを作成できる
+
    Dim ci1 As New CI1
+

          
+
    ' インナークラスCI1のメソッドM1はPublicなので呼び出すことができる
+
    ci1.M1()
+

          
+
    ' インナークラスCI2も同様に同一クラス内で宣言されているのでインスタンスを作成できる
+
    Dim ci2 As New CI2
+

          
+
    ' インナークラスCI2のメソッドM1はPublicなので呼び出すことができる
+
    ci2.M1()
+

          
+
    ' 一方メソッドM2はPrivateなので呼び出すことはできない
+
    'ci2.M2()
+
  End Sub
 
End Class
End Class
 

        

        
+
Class X
+
  Sub M()
+
    ' クラスCのインナークラスCI1はPublicなのでインスタンスを
+
    ' 作成することができる
+
    Dim ci1 As New C.CI1
+

          
+
    ' 一方インナークラスCI2はPrivateなのでインスタンスを
+
    ' 作成することができる
+
    'Dim ci2 As New C.CI2
+
  End Sub
+
End Class
+
}}
 

        

        
~
クラスの場合、ネストされた型にアクセス修飾子Protectedを指定することができます。 Protectedが指定された型は、型が宣言されているクラスとその派生クラスにのみ公開されます。
Module MainModule
 

        

        
~
#code(vb,Protectedなインナークラスの例){{
    Sub Main()
+
Class C
+
  ' Protectedなインナークラス
+
  Protected Class CI
+
  End Class
+
End Class
 

        

        
~
Class C1
        Dim x As New SampleClass()
+
  ' クラスCを継承
+
  Inherits C
+

          
+
  Sub M()
+
    ' インナークラスCIは基底クラスCで宣言されたProtectedなクラスなので
+
    ' インスタンスを作成できる
+
    Dim ci As New CI
+
  End Sub
+
End Class
 

        

        
~
Class X
        ' このフィールドにはアクセス可能
~
  Sub M()
        x.publicField = 0
+
    ' クラスXはクラスCとは継承関係にないため、インナークラスCIの
+
    ' インスタンスを作成することはできない
+
    Dim ci As New C.CI
+
  End Sub
+
End Class
+
}}
 

        

        
~
**ネストされた型と親クラスのメンバのアクセシビリティ
        ' このメソッドにはアクセス可能
~
ネストされた型からは親クラスのすべてのメンバを参照することができます。 例えば、次のようにインナークラスから親クラスのPrivateなメソッドを呼び出すこともできます。
        x.PublicMethod()
 

        

        
+
#code(vb,インナークラスから親クラスのメンバを参照する例){{
+
Class C
+
  ' Privateなメソッド
+
  Private Sub M()
+
  End Sub
+

          
+
  ' インナークラス
+
  Private Class CI
+
    Private c As C
+

          
+
    ' コンストラクタで親クラスのインスタンスを受け取る
+
    Public Sub New(ByVal c As C)
+
      MyClass.c = c
 
    End Sub
    End Sub
 

        

        
~
    Sub M()
End Module
+
      ' 親クラスCのPrivateなメソッドMを呼び出す
+
      c.M()
+
    End Sub
+
  End Class
+
End Class
+
}}
+

          
+
*インターフェイスの実装とアクセシビリティ
+
インターフェイスの実装となるメンバは、そのアクセシビリティと無関係に参照可能となる点に注意が必要です。 次の例のように、インターフェイスのメソッドをPrivateなメソッドとして実装していたとしても、インターフェイス型にキャストすればそのメソッドを呼び出すことが可能となります。
+

          
+
#code(vb,インターフェイスを介してPrivateなメンバを参照する例){{
+
Class C
+
  ' IDisposableインターフェイスを実装する
+
  Implements IDisposable
+

          
+
  ' IDisposable.Disposeの実装となるメソッド
+
  Private Sub Dispose() Implements IDisposable.Dispose
+
    Console.WriteLine("disposed")
+
  End Sub
+
End Class
+

          
+
Class Sample
+
  Shared Sub Main()
+
    Dim c As New C
+

          
+
    ' C.DisposeメソッドはPrivateなので直接呼び出すことはできない
+
    'c.Dispose()
+

          
+
    ' CをIDisposableにキャスト
+
    Dim d As IDisposable = DirectCast(c, IDisposable)
+

          
+
    ' C.DisposeメソッドがPrivateでも、IDisposableインターフェイスを介して
+
    ' Disposeメソッドを呼び出すことができる
+
    d.Dispose()
+
  End Sub
+
End Class
 
}}
}}
 

        

        
 
#navi(..)
#navi(..)

programming/vb.net/basics/02_operator/index.wiki.txt

current previous
10,8 10,8
 

        

        
 
#googleadunit(banner)
#googleadunit(banner)
 

        

        
~
*算術演算子 [#ArithmeticOperators]
*基本的な算術演算子
~
基本的な算術演算子はVB6とほぼ同じです。
基本的な演算子はVB6とほぼ同じです。
 

        

        
 
#code(vb){{
#code(vb){{
 
Dim i As Integer
Dim i As Integer
30,10 30,10
 
s = s & "String" ' 文字列の連結 : s = "String文字列String"
s = s & "String" ' 文字列の連結 : s = "String文字列String"
 
}}
}}
 

        

        
~
なお、[[Mathクラス>programming/netfx/mathematics/0_math]]のメソッドを使うことでも[[剰余と商>programming/netfx/mathematics/0_math#FuncMulDiv]]、[[べき乗>programming/netfx/mathematics/0_math#FuncPower]]を求めることができます。
剰余と商、べき乗などは[[Mathクラス>programming/netfx/mathematics/0_math]]のメソッドを使って求めることもできます。
 

        

        
~
**複合代入演算子
*複合代入演算子
~
VB.NETからは複合代入演算子が使用できるようになりました。 しかしながら、インクリメント演算子(++)、ディクリメント演算子(--)は存在しません。 また、Modについては複合代入演算子は用意されていません。
VB.NETからは複合代入演算子が使用できるようになりました。 しかしながら、インクリメント演算子(++)、ディクリメント演算子(--)は存在しません。 また残念ながら、Modについては複合代入演算子が用意されていません。
 

        

        
 
#code(vb){{
#code(vb){{
 
Dim i As Integer = 5
Dim i As Integer = 5
51,49 51,7
 
s &= "String" ' s = s & "String" と 等価
s &= "String" ' s = s & "String" と 等価
 
}}
}}
 

        

        
~
*比較演算子 [#ComparisonOperators]
*論理演算子
+
VB.NETでの比較演算子はVB6以前の論理演算子と代わりありません。
+

          
+
**等価・不等価演算子 [#EqualityOperators]
+
値が等しいかどうか(値の等価性・不等価性)を比較するには、等価演算子 ''='' および 不等価演算子 ''<>''を使用します。
+

          
+
#code(vb){{
+
Dim i As Integer = 7
+

          
+
If i = 5 Then Console.WriteLine("iは5です")
+
If i <> 5 Then Console.WriteLine("iは5ではありません")
+

          
+
Dim s As String = "abc"
+

          
+
If s = "abc" Then Console.WriteLine("sは'abc'です")
+
If s <> "abc" Then Console.WriteLine("sは'abc'ではありません")
+
}}
+

          
+
独自に定義した型の場合、等価演算子・不等価演算子で等価性を比較することはできません。 独自型の比較方法や等価演算子のオーバーロード方法については[[programming/netfx/comparison/1_equation]]を参照してください。
+

          
+
**関係演算子 [#RelationOperators]
+
値の大小関係を比較するには、関係演算子 ''<'', ''>'' および ''<='', ''>='' を使用します。
+

          
+
#code(vb){{
+
Dim i As Integer = 7
+

          
+
If i < 5 Then Console.WriteLine("iは5未満です")
+
If i <= 5 Then Console.WriteLine("iは5以下です")
+
If i > 5 Then Console.WriteLine("iは5を超えます")
+
If i >= 5 Then Console.WriteLine("iは5以上です")
+

          
+
Dim s As String = "ABC"
+

          
+
If s < "abc" Then Console.WriteLine("sは'abc'より後ろに並べられます")
+
If s > "abc" Then Console.WriteLine("sは'abc'より前に並べられます")
+
}}
+

          
+
独自に定義した型の場合、関係演算子で大小関係を比較することはできません。 独自型の比較方法や関係演算子のオーバーロード方法については[[programming/netfx/comparison/0_comparison]]を参照してください。
+

          
+
**文字列の比較
+
大文字小文字を無視した比較の方法など、文字列の比較については[[programming/netfx/string/2_1_comparison#String.CompareTo]]および[[programming/netfx/string/2_2_compareoptions]]で詳しく解説しています。
+

          
+
*論理演算子 [#LogicalOperators]
 
VB.NETでの論理演算子はVB6以前の論理演算子と代わりありません。
VB.NETでの論理演算子はVB6以前の論理演算子と代わりありません。
 

        

        
 
#code(vb){{
#code(vb){{
108,8 66,8
 
b = Not b1    ' 論理否定 : b = False
b = Not b1    ' 論理否定 : b = False
 
}}
}}
 

        

        
~
**AndAlso演算子・OrElse演算子 [#LogicalOperators_AndAlsoOrElse]
**AndAlso演算子・OrElse演算子
~
VB.NETでは新たにAndAlsoとOrElseという演算子が追加されました。 これは''ショートサーキット''による評価を行うための演算子で、And/Or演算子とAndAlso/OrElse演算子の違いは、第二項が常に評価されるかどうかが異なる点にあります。 第一項がFalseの場合、AndAlsoは第二項を評価せずにFalseを返します。 同様に、第一項がTrueの場合、OrElseは第二項を評価せずに Trueを返します。
VB.NETでは新たにAndAlsoとOrElseという演算子が追加されました。 これはショートサーキットによる評価を行うための演算子で、And/Or演算子とAndAlso/OrElse演算子の違いは、第二項が常に評価されるかどうかが異なる点にあります。 第一項がFalseの場合、AndAlsoは第二項を評価せずにFalseを返します。 同様に、第一項がTrueの場合、OrElseは第二項を評価せずに Trueを返します。
 

        

        
 
And演算子とAndAlso演算子の違いをより明確にするため、次のようなコードを考えます。
And演算子とAndAlso演算子の違いをより明確にするため、次のようなコードを考えます。
 

        

        
171,38 129,34
 

        

        
 
AndAlso演算子・OrElse演算子の真理値表をまとめると次のようになります。
AndAlso演算子・OrElse演算子の真理値表をまとめると次のようになります。
 

        

        
+
#column
 
|*Or演算子の真理値表
|*Or演算子の真理値表
~
|~第一項|~第二項|~結果|h
|第一項|第二項|結果|h
 
|False|False|False|
|False|False|False|
 
|False|True|True|
|False|True|True|
 
|True|False|True|
|True|False|True|
 
|True|True|True|
|True|True|True|
~
#column

          
 
|*OrElse演算子の真理値表
|*OrElse演算子の真理値表
~
|~第一項|~第二項|~結果|h
|第一項|第二項|結果|h
 
|False|False|False|
|False|False|False|
 
|False|True|True|
|False|True|True|
 
|True|(評価しない)|True|
|True|(評価しない)|True|
+
#column-end
 

        

        
+
#column
 
|*And演算子の真理値表
|*And演算子の真理値表
~
|~第一項|~第二項|~結果|h
|第一項|第二項|結果|h
 
|False|False|False|
|False|False|False|
 
|False|True|False|
|False|True|False|
 
|True|False|False|
|True|False|False|
 
|True|True|True|
|True|True|True|
~
#column

          
 
|*AndAlso演算子の真理値表
|*AndAlso演算子の真理値表
~
|~第一項|~第二項|~結果|h
|第一項|第二項|結果|h
 
|False|(評価しない)|False|
|False|(評価しない)|False|
 
|True|False|False|
|True|False|False|
 
|True|True|True|
|True|True|True|
+
#column-end
 

        

        
~
**If演算子 [#LogicalOperators_If]
**If演算子
~
VB.NET 2008(Visual Studio 2008)からは、If演算子がサポートされるようになりました。 これはCやC#の三項演算子 ''~?~:~'' と同様のものです。 If演算子は、If(&var{条件式};, &var{真の場合};, &var{偽の場合};)という形式で使用します。 If演算子は、AndAlso・OrElse演算子と同様にショートサーキットによる評価を行います。
VB.NET 2008(Visual Studio 2008)からは、If演算子がサポートされるようになりました。 これはCやC#の三項演算子 ''~?~:~'' と同様のものです。 If演算子は、If(&var{条件式};, &var{真の場合};, &var{偽の場合};)という形式で使用します。
 

        

        
 
#code(vb){{
#code(vb){{
 
Dim i As Integer = 1
Dim i As Integer = 1
229,30 183,18
 
Console.WriteLine("{0}は{1}です", i, oddeven)
Console.WriteLine("{0}は{1}です", i, oddeven)
 
}}
}}
 

        

        
~
***二項形式のIf演算子
また、If演算子では二項形式でも使用できます。 この場合、第一項がNothingの場合は第二項の値が返され、Nothing以外の場合は第一項の値がそのまま返されます。 ただし、If演算子を二項形式で使用する場合、第一項は参照型(もしくはnull許容型)でなければなりません。
~
If演算子では二項形式でも使用できます。 この場合、第一項がNothingの場合は第二項の値が返され、Nothing以外の場合は第一項の値がそのまま返されます。 ただし、If演算子を二項形式で使用する場合、第一項は参照型(もしくはnull許容型)でなければなりません。 二項形式のIf演算子は、C#におけるnull合体演算子 ''??'' と同様のものです。
#code(vb){{
+

          
+
#code(vb,参照型とIf演算子の例){{
 
Dim str As String = Nothing
Dim str As String = Nothing
 

        

        
~
Console.WriteLine(If(str, "Nothing")) ' 文字列 "Nothing" が出力される
Console.WriteLine(If(str, "Nothing")) ' 文字列"Nothing"が出力される
 

        

        
 
str = "foo"
str = "foo"
 

        

        
~
Console.WriteLine(If(str, "Nothing")) ' strに代入されている値 "foo" が出力される
Console.WriteLine(If(str, "Nothing")) ' strの値(文字列"foo")が出力される
+
}}
+

          
+
#code(vb,null許容型とIf演算子の例){{
+
Dim val As Integer? = Nothing ' null許容のInteger型
+

          
+
Console.WriteLine(If(val, 3)) ' 数値 3 が出力される
+

          
+
val = 16
+

          
+
Console.WriteLine(If(val, 3)) ' valに代入されている値 16 が出力される
 
}}
}}
 

        

        
~
**Eqv演算子・Imp演算子 [#LogicalOperators_EqvImp]
**Eqv演算子・Imp演算子
 
VB6以前に存在したEqv, Imp演算子はVB.NETではなくなりました。 これらの演算子と同様の結果を得るには次のようにします
VB6以前に存在したEqv, Imp演算子はVB.NETではなくなりました。 これらの演算子と同様の結果を得るには次のようにします
 

        

        
 
#code(vb){{
#code(vb){{
263,7 205,7
 
b = (Not b1) Or b2 ' VB6以前の「b = b1 Imp b2」と等価
b = (Not b1) Or b2 ' VB6以前の「b = b1 Imp b2」と等価
 
}}
}}
 

        

        
~
*ビット演算子 [#BitwiseOperators]
*ビット演算子
 
And, Or, Xor, Notの各演算子は、整数型に対してはビット演算子として動作します。
And, Or, Xor, Notの各演算子は、整数型に対してはビット演算子として動作します。
 

        

        
 
#code(vb){{
#code(vb){{
277,7 219,7
 

        

        
 
なお、長大なビット値を操作するために[[BitArray>programming/netfx/collections/9_misc]]といったコレクションを使用することもできます。
なお、長大なビット値を操作するために[[BitArray>programming/netfx/collections/9_misc]]といったコレクションを使用することもできます。
 

        

        
~
**ビットシフト演算子 [#BitwiseOperators_BitShift]
**ビットシフト演算子
 
VB.NET 2003(Visual Studio .NET 2003)からは、VB.NETでも算術ビットシフト演算子がサポートされるようになりました。 ビットシフト演算子はその名の通り、数のビット表記に対してその表記を右または左にシフトする演算子です。
VB.NET 2003(Visual Studio .NET 2003)からは、VB.NETでも算術ビットシフト演算子がサポートされるようになりました。 ビットシフト演算子はその名の通り、数のビット表記に対してその表記を右または左にシフトする演算子です。
 

        

        
 
算術的には、1ビット右にシフトする事は数を2で除することと等しく、1ビット左にシフトする事は数を2で乗ずる事と等しい演算です。 なお、ビットシフト演算子はその特性上、整数型(Byte, Short, Integer, Long)に対してのみ使用できます。 ビットシフト演算子は、下の例のようにシフトする対称の値を演算子の左の項に書き、右側にシフトする量を記述します。
算術的には、1ビット右にシフトする事は数を2で除することと等しく、1ビット左にシフトする事は数を2で乗ずる事と等しい演算です。 なお、ビットシフト演算子はその特性上、整数型(Byte, Short, Integer, Long)に対してのみ使用できます。 ビットシフト演算子は、下の例のようにシフトする対称の値を演算子の左の項に書き、右側にシフトする量を記述します。