溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

VB.NET局部靜態(tài)變量怎么用

發(fā)布時(shí)間:2021-12-02 11:19:42 來(lái)源:億速云 閱讀:181 作者:小新 欄目:編程語(yǔ)言

這篇文章主要為大家展示了“VB.NET局部靜態(tài)變量怎么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“VB.NET局部靜態(tài)變量怎么用”這篇文章吧。

VB.NET局部靜態(tài)變量

VB支持用Static關(guān)鍵字聲明局部變量,這樣在過程結(jié)束的時(shí)候可以保持變量的數(shù)值:

Public Sub Test1()  Static i As Integer  i += 1 '實(shí)現(xiàn)一個(gè)過程調(diào)用計(jì)數(shù)器  End Sub

我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的過程計(jì)數(shù)器。每調(diào)用一次Test,計(jì)數(shù)器的數(shù)值就增加1。其實(shí)還有很多情況我們希望保持變量的數(shù)值。而C#的static是不能用在過程內(nèi)部的。因此要實(shí)現(xiàn)過程計(jì)數(shù)器,我們必須聲明一個(gè)類級(jí)別的變量。這樣做明顯不如VB好。因?yàn)闊o(wú)法防止其他過程修改計(jì)數(shù)器變量。這就和對(duì)象封裝一個(gè)道理,本來(lái)應(yīng)該是一個(gè)方法的局部變量,現(xiàn)在我要被迫把它獨(dú)立出來(lái),顯然是不好的設(shè)計(jì)。那么VB是怎么生成局部靜態(tài)變量的呢?將上述代碼返匯編,我們可以清楚地看到在VB生成的CIL中,i不是作為局部變量,而是作為類的Field出現(xiàn)的:

.field private specialname int32 $STATIC$Test1$2001$i

也就是說,i被改名作為一個(gè)類的字段,但被冠以specialname。在代碼中試圖訪問$STATIC$Test1$2001$i是不可能的,因?yàn)樗皇且粋€(gè)有效的標(biāo)識(shí)符。但是在IL中,將這個(gè)變量加一的代碼卻與一般的類字段完全一樣,是通過ldfld加載的。我覺得這個(gè)方法十分聰明,把靜態(tài)變量變成生命周期一樣的類字段,但是又由編譯器來(lái)控制訪問的權(quán)限,讓它成為一個(gè)局部變量。同時(shí)也解釋了VB為什么要用兩個(gè)不同的關(guān)鍵字來(lái)聲明靜態(tài)變量—— Static和Shared。

由于VB.NET局部靜態(tài)變量的實(shí)質(zhì)是類的字段,所以它和真正的局部變量還是有所不同的。比如在多線程條件下,對(duì)VB.NET局部靜態(tài)變量的訪問就和訪問字段相同。

以上是“VB.NET局部靜態(tài)變量怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI