最近突然發現vb.net也有static關鍵字,那麼它和中的shared是不是同一個意思呢?是不是就是C#中的static關鍵字呢?答案是否定的

 

這是msnd對於vb.net的static的解釋

 

Static (Visual Basic)<!---->
<!--Content type: DocStudio. Transform: devdiv2mtps.xslt.-->
指定在聲明一個或多個區域變數的過程終止後,這些已聲明的區域變數繼續存在並保留其最新值。

 

備註
通常,過程終止後,此過程中的區域變數將立即消失。靜態變數可繼續存在,並保留其最新值。您的代碼下次調用此過程時,此變數將不會重新初始化,仍然存儲已賦給它的最新值。靜態變數在定義它的類或模組的存留期內繼續存在。

 

規則
聲明上下文。 只能對區域變數使用 Static。這意味著 Static 變數的聲明上下文必須是一個過程或過程中的塊,而不能是原始檔案、命名空間、類、結構或模組。

 

不能在結構過程內使用 Static。

 

組合修飾符。 不能在同一聲明中將 Static 與 ReadOnly、Shadows 或 Shared 同時指定。

 

行為
任何區域變數的行為都取決於此變數是否在 Shared 過程中聲明。如果過程為 Shared,該過程的所有區域變數都自動共用,包括 Static 變數。整個應用程式只有一個這種變數的副本。使用類名調用 Shared 過程,而不是使用指向此類的實例的變數。

 

如果過程不是 Shared,則其區域變數為「執行個體變數」,包括 Static 變數。每個變數在類的每個實例中都有一個獨立的副本。使用指向類的特定實例的變數調用非共用過程。該實例中的任何變數都與另一實例中相同名稱的變數無關。因此,它們可以存儲不同的值。

 

示例
下面的示例說明 Static 的用法。

 

Visual Basic
Public Class Describer Public Function NextNumber() As IntegerStatic Number As IntegerNumber += 1 Return Number End FunctionEnd ClassDim Desc As New DescriberMsgBox(Desc.NextNumber) '1MsgBox(Desc.NextNumber) '2MsgBox(Desc.NextNumber) '3Static 修飾符可用於下面的上下文中:

 

Dim 語句 (Visual Basic)

 

但是不可以放在function,sub中進行修飾

 

那麼在msdn中對於shared是怎麼解釋的呢?請看下面

 

指定一個或多個聲明的程式設計元素與一個類或結構在整體上相關聯,而不是與類或結構的特定實例關聯。

 

備註
何時使用 Shared
共用類或結構的成員使每個實例都可以使用該成員,而不是採用非共用模式,在非共用模式下,每個實例都需要有自己的副本。例如,如果一個變數的值應用於整個應用程式,這點很有用。如果聲明該變數為 Shared,那麼所有實例會訪問相同的存儲位置,而如果一個實例更改了變數值,所有實例都會訪問更新後的值。

 

Shared 修飾符可用於下面的上下文中:

 

Dim 語句

 

Event 語句

 

Function 語句

 

運算子語句

 

Property 語句

 

Sub 語句


 

Public Class Describer

 

Shared Number As Integer

 

Public Function NextNumber() As Integer

 

Number += 1
Return Number

 

End Function

 

End Class

 

Dim Desc1 As New Describer
Dim Desc2 As New Describer

 

MsgBox(Desc1.NextNumber) '1
MsgBox(Desc1.NextNumber) '2
MsgBox(Desc1.NextNumber) '3

 

MsgBox(Desc2.NextNumber) '4
MsgBox(Desc2.NextNumber) '5
MsgBox(Desc2.NextNumber) '6
 
 
 
 
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()