網頁

結構(Structure)關鍵字

當我們程式有類似「資料結構」的內容時,可以使用Structure這個關鍵字來幫我們建立一個資料結構。Structure與Class很類似,我們先來看MSDN解譯:

Structure 陳述式定義可自訂的複合 (Compositing) 實值型別。
...
結構支援許多和類別相同的功能。例如,結構可以具有屬性和程序、可以實作介面,也可以具有參數型建構函式。但是,結構與繼承 (Inheritance)、宣告和使用方式等區域中的類別之間有明顯的差異。而且,類別是參考型別 (Reference Type),而結構是實值型別 (Value Type)。
...
結構支援許多和類別相同的功能。例如,結構可以具有屬性和程序、可以實作介面,也可以具有參數型建構函式。但是,結構與繼承 (Inheritance)、宣告和使用方式等區域中的類別之間有明顯的差異。而且,類別是參考型別 (Reference Type),而結構是實值型別 (Value Type)。
...
結構預設值為 Friend (Visual Basic) 存取。
 如果你對Friend不是很了解,可以參考這篇討論「Public與Friend的差異」。我們使用MSDN上的範例來改寫:

先在畫面上放兩個Textbox,一個輸入薪資,一個輸入獎金比例,在放一個按鈕來計算獎金:

<div>
        新資:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        倍數:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button1" runat="server" Text="計算獎金" />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label">
    </div>

在後置程式碼中,我們先定義Structure,然後在click事件中撰寫處理程式:

Partial Class _Default
    Inherits System.Web.UI.Page

    Public Structure Employee
        Dim Name As String          '姓名
        Dim EmpNumber As String     '員工編號
        Dim Salary As Double        '薪資
        Dim Bonus As Double         '獎金

        Friend Sub CalcBonus(ByVal Rate As Single)
            '獎金計算
            Bonus = Salary * Rate
        End Sub
    End Structure

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Bruce As Employee

        Bruce.Name = "金剛"
        Bruce.EmpNumber = "s2877001"
        Bruce.Salary = Me.TextBox1.Text
        Bruce.CalcBonus(Me.TextBox2.Text)

        Me.Label1.Text = String.Format("您好{0}<br/>員工編號:{1}<br/>薪資:{2}元<br/>獎金:{3}元<br/>共領:{4}元", Bruce.Name, Bruce.EmpNumber, Bruce.Salary, Bruce.Bonus, Bruce.Salary + Bruce.Bonus)
    End Sub
End Class

你查看一下Dim Bruce As Employee,Employee是Structure而不是ClassBruce是_Default.Employee型別,想成Structure的型別。

當我們不需要使用到Class那怎那強大又複雜的功能時,就可以考慮使用Structure,另一個好處是使用Structure的幫我們整理相關的資料細節,讓我們的程式看起來更有結構性。如果以上程式不使用Structure的話寫法如下:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Name As String          '姓名
        Name = "金剛"
        Dim EmpNumber As String     '員工編號
        EmpNumber = "s2877001"
        Dim Salary As Double        '薪資
        Salary = Me.TextBox1.Text
        Dim Bonus As Double         '獎金
        Bonus = Salary * Me.TextBox2.Text

        Me.Label1.Text = String.Format("您好{0}<br/>員工編號:{1}<br/>薪資:{2}元<br/>獎金:{3}元<br/>共領:{4}元", Name, EmpNumber, Salary, Bonus, Salary + Bonus)
    End Sub

如這時需要在計算一個女金剛的資料,那你就必須再重覆的Dim ...,而且第二次還不能使用相同名稱,但如果使用Structure我只需要「Dim Sherry As Employee」完成了整個資料結構,所有的屬性、函數…都一樣,使用起來輕鬆又方便。一個好用的技巧,介紹給大家。

1 則留言:

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。