Const 陳述式 (Visual Basic)
宣告並定義一或多個常數。
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Const constantlist
組件
attributelist
選擇項。套用到這個陳述式中宣告之所有常數的屬性清單。請參閱以角括弧 ("<" 和 ">") 括起來的屬性清單 (Visual Basic)。accessmodifier
選擇項。使用此項,指定哪一個程式碼可以存取這些常數。選項如下:Public (Visual Basic)、Protected (Visual Basic)、Friend (Visual Basic)、Protected Friend 或 Private (Visual Basic)。Shadows
選擇項。使用此項,重新宣告並隱藏基底類別中的程式設計項目。請參閱 Shadows。constantlist
必要項。這個陳述式中要宣告的常數清單。constant[ , constant ... ]
每個 constant 都具有下列語法和組成部分:
constantname[ As datatype ] = initializer
組件
描述
constantname
必要項。常數名稱。請參閱 宣告項目名稱 (Visual Basic)。
datatype
如果 Option Strict 為 On,則為必要項。常數的資料型別。
initializer
必要項。在編譯時期評估並指派給常數的運算式。
備註
如果應用程式中有一個永遠不會變更的值,則您可以定義一個具名常數,然後以這個常數代替常值 (Literal)。因為名稱會比值更容易記住。您只需定義這個常數一次,便可以將這個常數用在程式碼中的許多地方。在更新的版本中,如果需要重新定義值,則 Const 陳述式會是唯一需要進行的變更。
您只能在模組或程序層級使用 Const。這表示變數的「宣告內容」(Declaration Context) 必須是類別、結構、模組、程序或區塊,且不可以是原始程式檔 (Source File)、命名空間 (Namespace) 或介面。如需詳細資訊,請參閱宣告內容和預設存取層級 (Visual Basic)。
在程序內的區域常數會預設為公用 (Public) 存取,而且您無法對這些常數使用任何存取修飾詞 (Modifier)。類別和模組成員常數 (在任何程序外) 預設為私用 (Private) 存取,而結構成員常數則預設為公用存取。您可以使用存取修飾詞調整存取層級。
規則
宣告內容: 在模組層級宣告的常數 (在任何程序外) 是「成員常數」(Member Constant),屬於宣告它的類別、結構或模組的成員。
在程序層級宣告的常數則是「區域常數」,屬於宣告它的程序或區塊的區域常數。
屬性 :您只能將屬性套用到成員常數,不能套用到區域常數。屬性會提供資訊給組件的中繼資料 (Metadata),這對於區域常數之類的暫時儲存體並沒有意義。
修飾詞。 根據預設,所有的常數都是 Shared、Static 和 ReadOnly。宣告常數時,您無法使用任何一個上述關鍵字。
在程序層級中,您無法使用 Shadows 或任何存取修飾詞宣告區域常數。
多個常數 您可以在同一個宣告陳述式中宣告數個常數,並為每一個常數指定 constantname 部分。常數之間以逗號 (,) 來分隔。
資料型別規則
資料型別Const 陳述式可以宣告變數的資料型別。您可以指定任何資料型別或列舉型別名稱。
預設型別。 如果沒有指定 datatype,則常數會採用 initializer 的資料型別。如果同時指定 datatype 和 initializer,則 initializer 的資料型別必須可以轉換為 datatype。如果既不指定 datatype,也不指定 initializer,則資料型別會預設值為 Object。
不同型別 您宣告的每一個變數都可以使用個別的 As 子句,以便為不同常數指定不同資料型別。不過無法使用一般 As 子句,宣告數個型別相同的常數。
初始設定: 您必須初始化 constantlist 中每一個常數的值。您可以使用 initializer 提供要指派給常數的運算式。運算式可以是常值、其他已定義的常數,以及已定義之列舉型別成員的任意組合。您可以利用算術和邏輯運算子 (Logical Operator) 來結合這樣的項目。
在 initializer 中不能使用變數或函式。但是,您可以使用轉換關鍵字,例如 CByte 和 CShort。如果您使用常數 String 或 Char 引數來呼叫,也可以使用 AscW,因為可以在編譯時期進行評估。
行為
範圍。 :區域常數只能從其程序或區塊內進行存取。成員常數則可以從其類別、結構或模組內的任意位置進行存取。
限定性條件。 :類別、結構或模組外的程式碼必須以該類別、結構或模組的名稱,限定成員常數的名稱。程序或區塊外的程式碼,無法參考該程序或區塊內的任何區域常數。
範例
下列範例會利用 Const 陳述式,宣告用於取代常值的常數。
' The following statements declare constants.
Const maximum As Long = 459
Public Const helpString As String = "HELP"
Private Const startValue As Integer = 5
如果您定義一個資料型別為 Object 的常數,則 Visual Basic 編譯器會指定這個常數的型別為 initializer,而不是 Object。在下列範例中,常數 naturalLogBase 具有執行階段型別 Decimal。
Const naturalLogBase As Object = CDec(2.7182818284)
MsgBox("Run-time type of constant naturalLogBase is " &
naturalLogBase.GetType.ToString())
前一個範例會在 GetType 運算子 (Visual Basic)所傳回的 Type 物件上使用 ToString 方法,因為 Type 無法使用 CStr 轉換為 String。