次の方法で共有


定数とリテラルのデータ型

更新 : 2007 年 11 月

リテラルは、変数の値または式の結果としてではなく、数字の 3 や文字列 "Hello" などのように、そのままの形で表される値です。定数は、リテラルの代わりに使用される有効な名前であり、値が変化する変数とは対照的に、プログラム全体をとおして同じ値を保持します。

Option Strict が On の場合、明示的にデータ型を指定してすべての定数を宣言する必要があります。次の例では、MyByte のデータ型が、データ型 Byte として明示的に宣言されています。

Option Strict On

Public Class Sample
  Public Const MyByte As Byte = 2
End Class

データ型を明示的に宣言すると、あいまいさがなくなり、型を指定しないコードよりもわかりやすくなります。ただし、Option Strict が Off の場合、コンパイラは定数を初期化する式の型を使用します。整数リテラルは、既定で整数型 (Integer) にキャストされます。浮動小数点数の既定のデータ型は Double であり、キーワード True と False は Boolean 定数を指定します。

リテラルと型の自動変換

大きな整数リテラル値を Decimal の変数に代入する場合など、リテラルを特定のデータ型に強制的に変換することが必要な場合があります。次の例では、エラーが発生します。

Dim myDecimal as Decimal
myDecimal = 100000000000000000000   ' This causes a compiler error.

このエラーの原因は、リテラルの表現にあります。Decimal データ型はこの大きさの値を格納できますが、リテラルは暗黙的に、この大きさの値を格納できない Long として表されています。

リテラルを特定のデータ型に自動的に変換するには、2 つの方法があります。リテラルに型文字を追加する方法と、リテラルを囲み文字の間に配置する方法です。型文字や囲み文字は定数の直前、直後に指定する必要があります。間にはどのような文字も空白も指定しないでください。

前の例を修正するには、リテラルの末尾に型文字 D を追加します。これにより、リテラルが Decimal として表されるようになります。

Dim MyDecimal As Decimal = 100000000000000000000D

型文字と囲み文字の正しい使用方法を次の例に示します。

' Default to Integer.
Public Const DefaultInteger As Integer = 100

' Default to Double.
Public Const DefaultDouble As Double = 54.3345612

' Force constant to be type Char.
Public Const MyCharacter As Char = "a"c

' DateTime constants.
Public Const MyDate As DateTime = #1/15/2001#
Public Const MyTime As DateTime = #1:15:59 AM#

' Force data type to be Long.
Public Const MyLong As Long = 45L

' Force data type to be Single.
Public Const MySingle As Single = 45.55!

次の表は、Visual Basic で使用できる囲み文字と型文字の一覧です。

データ型

囲み文字

末尾の型文字

Boolean

(なし)

(なし)

Byte

(なし)

(なし)

Char

"

C

Date

#

(なし)

Decimal

(なし)

D または @

Double

(なし)

R または #

Integer

(なし)

I または %

Long

(なし)

L または &

Short

(なし)

S

Single

(なし)

F または !

String

"

(なし)

参照

処理手順

方法 : 定数を宣言する

方法 : 列挙型を宣言する

概念

ユーザー定義関数

定数の概要

列挙型の概要

列挙型と名前の修飾

組み込み定数と組み込み列挙型

参照

Option Strict ステートメント

Option Explicit ステートメント (Visual Basic)

データ型の概要 (Visual Basic)