tft每日頭條

 > 生活

 > 類屬性自定義值

類屬性自定義值

生活 更新时间:2025-01-12 01:46:15

各位朋友好,今日我們繼續關注"二師兄"的成長,所謂成長,就是一個曆程,是一個不斷完善自我,不斷充實自我的過程。在上一講中,我們談到類屬性不允許修改的問題,其實這個問題是非常重要的,核心的參數我們要保留自己的修改權,是不能讓他人左右的。

為了阻止類的外部使用者,如标準模塊1中的代碼,随意來修改Pigsy類的Gender屬性,我們要學會使用另外一種定義類的屬性(Property)的辦法。

首先,我們将Public Gender As String 改為Private myGender As String,

類屬性自定義值(類屬性的靈活設置)1

這樣性别屬性就被保護起來,外部使用者無法直接訪問了。在我的代碼中很多朋友會看到變量的命名都是以my來開始的,這也是我的習慣吧,如myModule,這是向他人說明這個模塊是我的,那麼變量也是我自己使用的。就是這麼簡單,沒有其他的含義。這樣,當myGender這個變量出現在代碼的其他地方時,我們一看前綴"my"就知道這是一個我自己定義的變量。或者在若幹年後,自己的代碼水平提高後,或許不會承認自己曾經寫過之前天真低級的代碼,但變量的命名規則确實是自己的規則。

現在類的外部使用者再也不能直接訪問修改myGender變量了,可我們還是希望外部訪問者能獲取性别方面的信息,那該怎麼弄呢?我們需要學習類模塊中對于屬性設置的另外的方法了:

Public Property Get

Public Property Let

Public Property Set

這三個語句在之前也給大家講解過,我們再來回顧一下:Public是公有的意思,有了它,類的外部使用者才能訪問。Property是屬性的意思。Get是獲取,Let是賦值(set是針對對象的賦值)。所以 Public Property Get是獲取類的某個屬性,Public Property Let是給某個屬性賦值。

下面我們修改Pigsy類的代碼如下:

Public Name As String

Private myGender As String

Public Situation As String

Public Sub Speak()

Select Case Situation

Case "師父"

MsgBox "八戒"

Case "師兄"

MsgBox "八戒"

Case "非正式"

MsgBox "呆子"

Case "師弟"

MsgBox "二師兄"

Case Else

MsgBox "天蓬元帥"

End Select

End Sub

Private Sub Class_Initialize()

Situation = "師兄"

End Sub

Public Property Get Gender() As String

Gender = myGender

End Property

Public Property Let Gender(inGender As String)

If myGender = "" Then

myGender =inGender

Else

MsgBox "對不起,二師兄不能做性别修改"

End If

End Property

代碼解析:上述代碼,為類定義了一個獲取性别(Gender)的屬性。我們直接将類的私有變量myGender的值直接返回給訪問者。代碼為類定義了一個設置性别(Gender)值的屬性。當你給性别賦值的時候,首先會檢查myGender的值是否為空字符串,如果是,就直接賦值。如果不是,說明之前已經被賦值過了,就彈出對話框提示不能修改。

說明:實際項目中,一般不會用對話框來提示類的使用者,而是通過觸發一個事件的方式來與類的使用者做信息的傳遞。

這樣,性别屬性就不再讓類的外部使用者随意修改了。你隻能為性别賦值一次,你可以叫這種屬性為"隻寫一次屬性"。

我們來看看類的使用效果,在模塊1中,我們修改代碼如下:

Sub MYNZ_31()

Dim objpigsy As pigsy

Set objpigsy = New pigsy

objpigsy.Name = "豬悟能"

objpigsy.Gender = "男"

objpigsy.Speak

MsgBox "修改前性别:" & objpigsy.Gender

objpigsy.Gender = "女"

MsgBox "修改後性别:" & objpigsy.Gender

End Sub

代碼解析:mynz過程中首先将給Gender賦值,然後提示用戶修改前的Gender,之後進行修改,會提示給用戶這個屬性是不能修改的,并通過提示給予驗證。

類模塊截圖:

類屬性自定義值(類屬性的靈活設置)2

标準模塊截圖:

類屬性自定義值(類屬性的靈活設置)3

下面我們看看代碼執行過程中的提示框:

類屬性自定義值(類屬性的靈活設置)4

類屬性自定義值(類屬性的靈活設置)5

類屬性自定義值(類屬性的靈活設置)6

類屬性自定義值(類屬性的靈活設置)7

通過這種方式來定義類的屬性,我們既能夠保護類的私有變量不受到外部使用者的随意修改,也能夠提供在我們允許的情況下訪問和修改類屬性的途徑。

作為VBA開發人員,要深入的領會這種屬性設置的意義,比如,如果在類中,将Public Property Get去掉,隻保留Public Property Let會怎麼樣?或者反過來,将Public Property Let去掉,隻保留Public Property Get又會怎麼樣?同時我們要注意嚴謹性,上述文章中提到的"隻寫一次屬性",但是如果你第一次将性别賦值為空字符串"",那麼你第二次還能再賦值。如果要設計一個真正的"隻寫一次屬性",你該怎麼做?這些問題都是值得我們思考的。

今日内容回向:

1 本講的"二師兄"有哪些屬性發生了改變?

2 "隻寫一次屬性"本講是如何實現的?

類屬性自定義值(類屬性的靈活設置)8

在取代OFFICE新的辦公軟件沒有到來之前,誰能在數據處理方面做到極緻,誰就是王者。其中登峰至極的技能非VBA莫屬!學習VBA是個過程,如太白詩雲:衆鳥高飛盡,孤雲獨去閑。相看兩不厭,隻有敬亭山。

"水善利萬物而不争",綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,有一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛争,看輕得失。茶,滿也好,少也好,不要計較;濃也好,淡也好,其中自有值得品的味道。去感悟真實的時間,靜下心,多學習,積累福報。而不是天天混日子,也不是天天熬日子。在後疫情更加嚴峻的存量殘殺世界中,為自己的生存進行知識的儲備,特别是新知識的儲備。學習時微而無聲,利用時則巨則洶湧。

VBA是利用Office實現自己小型辦公自動化的有效手段,我根據自己20多年的VBA實際利用經驗,現在推出了五部VBA教程。第一:VBA代碼解決方案,是VBA中各個知識點的講解,覆蓋絕大多數的VBA知識點;第二:VBA數據庫解決方案,是數據處理的專業利器,詳細的介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作。第三:VBA數組與字典解決方案,講解VBA中的數組和字典的利用。字典是VBA代碼水平提高的手段,值得深入的學習。第四:VBA代碼解決方案之視頻,是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。第五:VBA中類的解讀和利用,這是一部高級教程,對于自己理論的提高很有益處。上述教程可以根據1,3,2,5或者是4,3,2,5的順序逐漸深入的學習和利用。

類屬性自定義值(類屬性的靈活設置)8

最後将一阙詞送給緻力于VBA學習的朋友:浮雲掠過,暗語無聲,唯有清風,驚了夢中啼莺。望星,疏移北鬥,奈将往事雁同行。阡陌人,昏燈明暗,忍顧長亭,多少VBA人,暗夜中,悄聲尋夢,盼卻天明,怎無憑!

分享成果,随喜正能量

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved