變數和常量的有效範圍和同名問題

2021-06-26 02:23:27 字數 1986 閱讀 5371

這是我自己測試,並學習了網路材料後整理的結論。

參見msdn:高階變數主題,理解變數的範圍。

未測試類模組。未測試工程組。(請大家指正。)

首先,在「相同範圍」內(比如同乙個過程中,同乙個模組的宣告部分)不能兩次定義同名變數或常量(模組和其中的過程不是嚴格的「相同範圍」)。

其次,1.窗體模組的宣告部分,

對模組以外來說,

定義的變數,

如果是public定義的(不能用global),則可以被其他窗體和bas模組使用(讀取和賦值),但必須加上該窗體模組的名字。

如果是private和dim定義的,則根本不能被其他窗體和bas模組使用。

定義的常量,

只能寫const或private const,根本不能被其他窗體和bas模組使用。

對模組以內來說,

對於該窗體內部的各過程來說,窗體模組的宣告部分定義的變數無論是public、private還是dim,以及定義的常量,都是相同的情況,即,如果各過程中先使用了這個變數、常量,那麼就不能在過程中再定義,但如果過程中還沒有使用這個變數、常量,就可以再定義同名變數、常量而使用,而互不干擾。

2.bas模組的宣告部分,

對模組以外來說,

定義的變數和常量,

如果是global、public定義的,則可以被其他窗體和bas模組直接使用,但是「其他窗體和bas模組」必須沒有在宣告部分用任何語句定義過同名變數和常量,否則只能加上該bas模組的名字才能使用。如果有多個bas模組都定義了可直接使用的變數和常量,則直接使用時發生二義性錯誤。

如果是private和dim定義的(常數不能用dim定義,只有const則相當於private const),則根本不能被其他窗體和bas模組使用。

對模組以內來說,

對於該bas模組內部的各過程來說,模組的宣告部分無論用何種語句定義的變數和常量,都是相同的情況,即,如果各過程中先使用了這個變數、常量,那麼就不能在過程中再定義,但如果過程中還沒有使用這個變數、常量,就可以再定義同名變數、常量而使用,而互不干擾。

3.在窗體模組、bas模組的各過程內部定義的,只能用dim、static定義變數,用const定義常量,只在該過程內部有效。過程內部(在用到這個變數常量時還)沒有定義的,則先去找本模組宣告部分定義的,如果還沒有,則去找其他bas模組宣告部分定義的而且可以對外直接使用的。找到以後就不能在過程中再定義同名變數。

4.事件過程的引數須依照事件本身的描述,不可改變。通用過程sub和函式function中的引數使用情況,第

一、不能定義形參(虛參)。第

二、對於形參的賦值不會改變傳值的實參(反過來說,如果sub、function中能夠對這個實參賦值,比如它是乙個模組級變數、用其本身的名稱對其賦值,也不會影響對形參的計算),但能改變傳位址的實參(sub和function預設都是byref傳位址。如果實參是控制項的屬性比如text1.text則不會變化,除非直接對其賦值)。第

三、如果出現形參以外的引數名,則按上面一條中的順序去找引數的定義。

5.綜上所述,

①如果不希望各窗體、bas模組的變數和常量有任何互相影響的,則在各窗體、bas模組的宣告部分都用private定義變數和常量。(窗體的控制項屬性只要加窗體名字就可以使用(讀取和賦值,如果可以賦值的話),和怎麼定義變數沒關係。)

②如果允許窗體變數被其他窗體和bas模組加窗體名字使用的,則在該窗體宣告部分用public定義變數。

③如果希望某個bas模組的變數常量直接被其他窗體和bas模組使用的(相當於「全域性變數」),則在該bas模組宣告部分應該用global、public來定義,而且其他窗體和bas模組的宣告部分和具體使用的過程中都沒有定義同名變數常量。

④如果希望模組內的某變數常量被模組內各過程使用的,則在該模組宣告部分用private、dim定義,而且具體使用的過程中都沒有定義同名變數常量。

⑤過程中類似於i、j、k、temp等迴圈變數、臨時變數,最好要麼只在模組的宣告部分用private、dim定義,要麼只在各過程開始的地方定義。

總的來說,應該盡量避免各處的變數常量、過程函式、控制項同名。至少要意識到可能會有問題,這樣出現問題的時候容易找到原因。

變數的有效範圍

變數的有效範圍是指 程式 能夠訪問該變數的區域 如超出該區域,則編譯時會出現錯誤。根據變數的有效範圍將變數分為全域性變數 成員變數 和區域性變數 成員變數 在類體中定義的變數,成員變數在整個類中都是有效的。成員變數分為靜態變數和例項變數 靜態變數可以跨類,甚至可達到整個應用程式之內。除了能在定義它的...

變數和常量

package com.xy.pf.test.xiti 關鍵字static 1.靜態方法和靜態變數是屬於某乙個類,而不屬於類的物件 2.靜態方法和靜態變數的引用直接通過類名呼叫 3.在靜態方法中不能呼叫非靜態的方法和引用非靜態的成員變數 反之,則可以 4.可以用類的物件obj來呼叫靜態的方法meth...

常量和變數

常量 固定的資料 四類 整型 浮點型 單精度和雙精度 字元型 字串型 字元型常量 不能是中文,單引號引起來的 字串型常量 雙引號引起來的 變數 表示乙個需要經常改變或者不確定的資料 特點 1.建立了乙個變數相當於在記憶體中占用了一片空間 2.空間的大小是固定的,但裡面的資料可以改變 3.同乙個作用域...