VB中類的欄位和屬性的區別和用法

來源:互聯網
上載者:User

類由欄位、屬性、方法和事件組成。欄位和屬性工作表示對象包含的資訊。欄位類似於變數,因為可以直接讀取或設定它們。例如,如果有一個名為 Car 的對象,則可以在名為 Color 的欄位中儲存其顏色。屬性的檢索和設定方法與欄位類似,但是屬性是使用 Property Get 和 Property Set 過程實現的,這些過程對如何設定或傳回值提供更多的控制。在儲存值和使用此值的過程之間的間接層協助隔離資料,並使您得以在分配或檢索值之前驗證這些值。

向類添加欄位
在類定義中聲明一個公開變數,如下面的代碼所示:

Class ThisClass 
   Public ThisField As String 
End Class 

向類添加屬性
在類中聲明一個局部變數來儲存屬性值。因為屬性不會自行分配任何儲存區,所以該步驟是必需的。若要保護它們的值不被直接修改,用於儲存屬性值的變數應當聲明為 Private。
根據需要以修飾符(如 Public 和 Shared)作為屬性聲明的開頭。使用 Property 關鍵字聲明屬性名稱,並聲明屬性儲存區和返回的資料類型。
在屬性定義中定義 Get 和 Set 屬性過程。Get 屬性過程用於返回屬性值,基本等效於文法中的函數。它們不接受參數,可用於返回在類中聲明的、用於儲存屬性值的私人局部變數的值。Set 屬性過程用於設定屬性的值,它們有參數(通常稱為 Value),該參數的資料類型與屬性本身的資料類型相同。每當屬性值更改時,Value 均會被傳遞給 Set 屬性過程,在該過程中可以驗證它並將其儲存在一個局部變數中。
根據需要使用 End Get 和 End Set 語句終止 Get 和 Set 屬性過程。
使用 End Property 語句終止屬性塊。
注意   如果正在 Visual Studio 整合式開發環境 (IDE) 下工作,可以指示它去除空的 Get 和 Set 屬性過程。鍵入 Property PropName As DataType(其中,PropName 是屬性名稱,DataType 是特定資料類型,如 Integer),相應的屬性過程將出現在代碼編輯器中。
下面的樣本在類中聲明一個屬性:

Class ThisClass 
   Private m_PropVal As String 
   Public Property One() As String 
      Get 
         Return m_PropVal ' Return the value stored in the local variable. 
       ' Optionally, you can use the syntax One = PropVal to return 
       ' the property value. 
      End Get 
      Set(ByVal Value As String) 
         m_PropVal = Value ' Store the value in a local variable. 
      End Set 
   End Property 
End Class 

當建立 ThisClass 的一個執行個體並設定 One 屬性的值時,將調用 Set 屬性過程且該值在 Value 參數中傳遞,該參數儲存在名為 m_PropVal 的局部變數中。當檢索此屬性值時,將像函數那樣調用 Get 屬性過程並返回儲存在局部變數 m_PropVal 中的值。

屬性和屬性過程
可以使用屬性和欄位在對象中儲存資訊。屬性使用屬性過程式控制制如何設定或傳回值,而欄位只是公開變數。屬性過程是在屬性定義中聲明的代碼塊,使您可以在設定或檢索屬性值時執行代碼。Visual Basic .NET 有兩種類型的屬性過程:Get 屬性過程用於檢索屬性值;Set 屬性過程用於向屬性賦值。例如,儲存銀行帳戶餘額的屬性可能會在 Get 屬性過程中使用代碼以在返回可用餘額之前記入利息並檢查服務費。用於可用餘額的 Set 屬性過程會提供驗證代碼以防止不正確地更新喻額。簡而言之,屬性過程允許對象保護和驗證自己的資料

唯讀和唯寫屬性
大多數屬性有 Get 和 Set 這兩個屬性過程以使您可以同時讀取和修改所儲存的值。然而,您可以使用 ReadOnly 或 WriteOnly 修飾符來限制對屬性的讀取或修改。唯讀屬性不能有 Set 屬性過程,它們可用於需要公開但不允許修改的項。例如,可以使用唯讀屬性來提供電腦處理器的速度。唯寫屬性不能有 Get 屬性過程,它們可用於需要儲存但不對其他對象公開的資料。例如,唯寫屬性可以用於儲存密碼。

注意   在將對象分配給屬性時,Visual Basic 的早期版本支援使用 Let 屬性過程。Visual Basic .NET 消除了對 Let 屬性過程的需要,因為可以像處理其他任何種類的分配那樣處理對象分配。

屬性過程與欄位
屬性與欄位都可在對象中儲存和檢索資訊。它們的相似性使得在給定情況下很難確定哪個是更好的編程選擇。

在以下情況下使用屬性過程:
需要控制設定或檢索值的時間和方式時。
屬性有定義完善的一組值需要進行驗證時。
設定值會導致對象狀態中發生某些可察覺更改(如一個可見屬性)時。
設定屬性會導致更改其他內部變數或其他屬性的值時。
必須先執行一組步驟,然後才能設定或檢索屬性時。

在以下情況下使用欄位:
值為自驗證類型時。例如,如果將 True 或 False 以外的值分配給 Boolean 變數,就會發生錯誤或自動資料轉換。
在資料類型所支援範圍內的任何值均有效時。Single 或 Double 類型的很多屬性屬於這種情況。
屬性是 String 資料類型,且對於字串的大小或值沒有任何約束時。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.