1. 程式人生 > >探秘VB.net中的shared與static

探秘VB.net中的shared與static

錯誤 https post data amp 通過 修飾 否則 padding

版權聲明:本文為博主原創文章,未經博主同意不得轉載。

https://blog.csdn.net/huyuyang6688/article/details/28230345


? ? ? ?簡單了解了一下C#之後,非常快就要開始重構機房收費系統了,有人選擇用C#來實現,只是還是想好好了解一些VB.net。用它來實現。

?

? ? ? ?有了VB和面向對象基礎。學習VB.NET是極易上手的。學習了幾種語言的我們都有一種體會,編程語言就是一門語言,一個工具,通過它來實現某些功能。假如我們之前學過C++,C#等不論什麽一門OO語言。通過這些語言了解了OOP,如今讓你來學習VB.NET,肯定會特別easy。盡管他們的語法不一樣,但當中的思想都是一樣的。都有類、構造函數、屬性……

? ? ? ?

? ? ? ?VB.net和C#一些keyword的比較:


C#keyword VB.netkeyword
using Imports
?this Me
?void sub
?base MyBase
abstract Mustlnherit
sealed NotOverrideable
virtual MustOverride
switch Select
internal Friend
static shared
…… ……


? ? ? ? ? ?只是大家有木有發現,在VB.net中也有static的蹤影。那麽在VB.net中,static是不是和C#中的static一樣呢?它和shared有何差別呢?


? ? ? ?前面寫過一篇關於static的博客,這裏相當於再小拓展一下。


? ? ? ?先看兩個小樣例:

? ? ? ?C#:

    public class CircleArea    //計算圓的面積
    {
        public double Area(double radius)     //依據傳入的半徑值計算圓的面積
        {
            return PI.PI * radius * radius;
        }
    }

    public class PI     //定義PI的值
    {
        public static double PI = 3.14;      ‘在這裏,用static來修飾PI,以便其它地方調用
    }

? ? ? ?VB.net:

    Public Class CircleArea   ‘計算圓的面積
        Public Function Area(ByVal radius As Double) As Double  ‘依據傳入半徑來計算圓的面積
            Return PI.PI * radius * radius
        End Function
    End Class

    Public Class PI     ‘定義PI的值
        Public Shared PI As Double = 3.14       ‘
    End Class

? ? ? ? ?上面兩個小樣例中,都是把PI定義為靜態的值,然後供須要使用PI的類或其它地方來調使用,並且此時在VB.net實現的樣例中,PI類中的Shared無法換成Static。否則就會出現以下的錯誤提示:

? ? ? ?技術分享圖片

? ? ? ?原因何在?


? ? ? ?先來說VB.net中的Static


? ? ? ?還是通過一個樣例來說明,建立一個VB.net窗口應用程序:

    Public Class frmTest
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Static Dim temp As Integer = 1   ‘定義一個static變量temp
            temp = temp + temp
            MessageBox.Show("temp=" & temp)
        End Sub
    End Class
? ? ? ? ? ?當程序執行起來時。點擊Button1。彈出 temp=2;再點擊,temp=3,再點擊,temp=4…… ?並且。在這裏假設把Static換為Shared。則會報錯:

? ? ? ??技術分享圖片


? ? ? ?因此能夠推斷,在VB.net中的static主要用來修飾的是靜態變量,這裏強調“靜態”。主要是用static修飾的變量在程序執行時,在它的生存期內都是一直存在並保留著最新值,在下次調用時。不會被又一次初始化。


? ? ? ?僅僅能對局部變量使用static。這意味著Static變量的聲明上下文必須是一個過程中的塊,而不是源文件、命名空間、類、結構或模塊。不能再結構過程內使用Static。


? ? ? ?再來說VB.net中的shared


? ? ? ?在編程的過程中,常常須要共享一些數據。如我們在開發機房收費系統中用到的“單位價格”,與數據庫連接的字符串等等,都須要共享。


? ? ? ?回頭來看文章開頭那個計算圓面積的VB.net小程序:? ?

    Public Class CircleArea   ‘計算圓的面積
        Public Function Area(ByVal radius As Double) As Double  ‘依據傳入半徑來計算圓的面積
            Return PI.PI * radius * radius
        End Function
    End Class

    Public Class PI     ‘定義PI的值
        Public Shared PI As Double = 3.14       ‘
    End Class

? ? ? ? ?這裏。為什麽叫“Shared”?share在英語中是“分享、共用”的意思,而這裏的Shared所修飾的對象相同存放“同一個值”,是就用來“分享”的,供其它須要的對象所調用。因此我更喜歡稱它“共享類型”。跟上面的PI一樣,不論什麽大小的圓計算面積時都要使用PI值,所以把它用Shared來修飾。


? ? ? ? 什麽時候用Shared?

? ? ? ? 上面說到:“僅僅能對局部變量使用static。Static變量的聲明上下文必須是一個過程中的塊。而不是源文件、命名空間、類、結構或模塊。不能再結構過程內使用Static。”,Shared剛好相反。它不能修飾局部變量。

? ? ? ? 假設一個變量須要其它程序段共用時,那麽就用Shared,Shared能夠用在Event 、Function 、Property 、Sub ?等語句中。

? ? ? ??

? ? ? ? 很多其它精彩內容可參考MSDN:Shared (Visual Basic)? && ?Shared (Visual Basic)

? ? ? ? 菜鳥學藝不精,僅供參考,如有出入,歡迎交流。技術分享圖片

探秘VB.net中的shared與static