久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4611|回復(fù): 0
收起左側(cè)

VB6中類的屬性過程

[復(fù)制鏈接]
ID:140343 發(fā)表于 2016-9-24 20:32 | 顯示全部樓層 |閱讀模式

運(yùn)用屬性過程
Visual Basic 提供下表所列的三種屬性過程。
過程目的
Property Get返回屬性的值
Property Let設(shè)置屬性的值
Property Set設(shè)置對(duì)象屬性的值(即,該屬性含有對(duì)象引用)。

從上表可見,每一個(gè)屬性過程都有自己特殊的功能。典型的屬性由一對(duì)屬性過程組成:Property Get 檢索屬性的值,Property Let 或 Property Set給屬性賦值。
這些作用在有些情況下可能重疊。有兩類賦值的屬性過程的原因,是因?yàn)閷?duì)象引用賦給對(duì)象變量時(shí),Visual Basic 有特殊的語法:
Dim wdg As Widget
Set wdg = New Widget規(guī)則很簡(jiǎn)單:如果有 Set 語句,則 Visual Basic 調(diào)用 Property Set,如果沒有則調(diào)用 Property Let。
提示   返回到經(jīng)典的 Basics 語法,為了正確使用 Property Let 和 Property Set 保持清潔整齊,應(yīng)鍵入 Let x = 4(直到今天 Visual Basic 還支持的語法)而不是 x = 4,。Visual Basic總是根據(jù)賦值類型決定調(diào)用屬性過程— 對(duì)于 Let x = 4 調(diào)用 Property Let,對(duì)于 Set c1 = New Class1(對(duì)象屬性)則調(diào)用 Property Set。
詳細(xì)信息   “編程基礎(chǔ)”中“對(duì)象使用”解釋 Set 語句對(duì)對(duì)象變量的使用。
讀寫屬性下列編碼顯示了典型的讀寫屬性:
'屬性值的私有存儲(chǔ)區(qū)。
Private mintNumberOfTeeth As IntegerPublic
Property Get NumberOfTeeth() As Integer   
NumberOfTeeth = mintNumberOfTeeth
End Property
Public Property Let NumberOfTeeth(ByVal NewValue _   As Integer)   '(省略驗(yàn)證屬性值代碼。)   
mintNumberOfTeeth = NewValue
End Property存儲(chǔ)了屬性值的私有變量名,由作用域前綴 (m),類型前綴 (int) 和名稱 (NumberOfTeeth) 組成,其中,作用域前綴 (m) 指明變量是模塊級(jí)的。使用屬性相同的名稱可指明該變量和屬性是相關(guān)的。
毫無疑問,已經(jīng)注意到,這里和以前的示例一樣,含有讀寫屬性的屬性過程名必須是相同的。
注意   屬性過程缺省為公共的,因此,如果省略Public 關(guān)鍵詞,則屬性過程仍是公共的。如果想要使屬性為私有(只有對(duì)象內(nèi)部才可訪問),必須用 Private關(guān)鍵詞聲明。即使不是必須,最好還是使用 Public 關(guān)鍵詞,因?yàn)檫@可使意圖清楚。
運(yùn)行和播放屬性過程單步運(yùn)行一些屬性過程代碼是有益處的。使用“工程”菜單,打開一個(gè)新的 Standard Exe 工程,并增添一個(gè)類模塊。如上所示,從 NumberOfTeeth 屬性復(fù)制代碼到 Class1。
切換到 Form1,將下列代碼添加到 Load 事件中:
Private Sub Form_Load()   Dim c1 As Class1   Set c1 = New Class1   '賦給新的屬性值。   c1.NumberOfTeeth = 42   '顯示屬性值。   MsgBox c1.NumberOfTeethEnd Sub按 F8 鍵,單步運(yùn)行代碼。注意,當(dāng)屬性被賦值時(shí),運(yùn)行跳到 Property Let,當(dāng)檢索屬性值時(shí),運(yùn)行跳到 Property Get。將會(huì)發(fā)現(xiàn),對(duì)屬性過程其它組合,重復(fù)做這種練習(xí)是很有用的。
屬性過程對(duì)的參數(shù)必須匹配至今所見的屬性過程示例都很簡(jiǎn)單,對(duì)多數(shù)屬性而言屬性過程也將是這樣。但是,屬性過程可有多個(gè)參數(shù)— 甚至可選參數(shù)。多個(gè)參數(shù)中最有用的是數(shù)組,下面將討論。
當(dāng)使用多個(gè)參數(shù)時(shí),屬性過程對(duì)的參數(shù)必須匹配。下表給出了在屬性過程聲明中參數(shù)的要求。
過程聲明語法
Property GetProperty Get propertyname(1,..., n) As type
Property LetProperty Letpropertyname(1,..., n, n+1)
Property SetProperty Setpropertyname(1,..., n, n+1)

在 Property 過程中,從第一個(gè)參數(shù)到倒數(shù)第二個(gè)參數(shù) (1,..., n),必須具有與過程相同的名稱和數(shù)據(jù)類型。就象其它過程類型一樣,列表中必需參數(shù)應(yīng)排在第一個(gè)可選參數(shù)之前。
可能注意到,Property Get 過程的聲明比相關(guān)的 Property Let 或 Property Set少一個(gè)參數(shù)。Property Get 過程的數(shù)據(jù)類型的聲明必須與 Property Let 或 Property Set 最后一個(gè)參數(shù) (n+1) 的數(shù)據(jù)類型一樣。
例如,一個(gè)類似二維數(shù)組的屬性的 Property Let 聲明:
Public Property Let Things(ByVal X As Integer, _ByVal Y As Integer, ByVal Thing As Variant)   '(省略給數(shù)組元素賦值的代碼。)End PropertyProperty Get 的參數(shù)聲明必須與 Property Let 過程的參數(shù)名稱和數(shù)據(jù)類型相同:
Public Property Get Things(ByVal X As Integer, _ByVal Y As Integer) As Variant   '(省略從數(shù)組取值的代碼。)End Property在 Property Set 聲明中的最后參數(shù)的數(shù)據(jù)類型,要么是對(duì)象類型,要么是Variant 類型。
參數(shù)匹配圖 9.8 給出了這些參數(shù)匹配規(guī)則的理由。并顯示了 Visual Basic 如何將賦值語句部分與 Property Let 參數(shù)相匹配。
圖 9.8   Property Let 過程的調(diào)用

帶多參數(shù)的屬性過程最常用于創(chuàng)建屬性數(shù)組。
只讀屬性要?jiǎng)?chuàng)建只讀屬性,只須簡(jiǎn)單地省略 Property Let 或(對(duì)于對(duì)象屬性)Property Set。
對(duì)象屬性若要?jiǎng)?chuàng)建一個(gè)讀寫對(duì)象屬性,應(yīng)使用 Property Get 和 Property Set 如:
Private mwdgWidget As WidgetPublic Property Get Widget() As Widget   'Set 語句被用來返回一個(gè)對(duì)象引用。   Set Widget = mwdgWidgetEnd PropertyPublic Property Set Widget(ByVal NewWidget As Widget)   Set mwdgWidget = NewWidgetEnd Property Variants 屬性 Variants 數(shù)據(jù)類型的讀寫屬性是最復(fù)雜的。如下所示,使用三種屬性過程類型:
Private mvntAnything As VariantPublic Property Get Anything() As Variant   'Set 語句只用于包含了對(duì)象引用的任何屬性。   If IsObject(mvntAnything) Then      Set Anything = mvntAnything   Else      Anything = mvntAnything   End IfEnd PropertyPublic Property Let Anything(ByVal NewValue As Variant)   '(省略驗(yàn)證代碼。)   mvntAnything = NewWidgetEnd PropertyPublic Property Set Anything(ByVal NewValue As Variant)   '(省略驗(yàn)證代碼。)   Set mvntAnything = NewWidgetEnd Property在正確環(huán)境中,Property Set 和 Property Let 總是很正常的使用。但是,使用 Property Get 必須考慮以下二種情況:
strSomeString = objvar1.AnythingSet objvar2 = objvar1.Anything在第一種情況中,Anything 屬性包含了字符串,它賦給了 String 變量。在第二個(gè)情況中,Anything 屬性包含了對(duì)象引用,它被賦給對(duì)象變量。
通過使用 IsObject 函數(shù),在返回值之前測(cè)試私有 Variants 變量,可對(duì) Property Get 進(jìn)行編程來處理這兩種情況。
自然,當(dāng)屬性包含對(duì)象引用時(shí),如果第一條編碼被調(diào)用,將會(huì)出現(xiàn)錯(cuò)誤,但這不是 Property Get 問題,而是使用 Variants 屬性的問題。
僅寫一次屬性屬性過程有幾種可能的組合。所有的組合都是有效的,但有些相對(duì)來說不太常用,比如只寫屬性(只有 Property Let,而無 Property Get)。有些則取決于另外的因素,而不是所組合的屬性過程類型。
例如,如本章后“對(duì)象模型”所描述的那樣,當(dāng)通過創(chuàng)建一個(gè)對(duì)象模型在程序中組織對(duì)象時(shí),可能想讓該對(duì)象能引用包含它的對(duì)象。使用 Parent 屬性可這樣做。
當(dāng)對(duì)象創(chuàng)建時(shí),應(yīng)設(shè)置 Parent 屬性,但此后,可能想防止其被有意或無意地改變。以下示例顯示了 Account 對(duì)象如何使用 Parent 屬性。該屬性指向含有帳號(hào)的 Department 對(duì)象。
'Parent 屬性要用私有數(shù)據(jù)存儲(chǔ)Private mdeptParent As DepartmentProperty Get Parent() As Department   '使用 Set 語句引用對(duì)象。
   Set Parent = mdeptParentEnd Property'屬性值只能被設(shè)置一次。
Public Property Set Parent(ByVal NewParent _As Department)   
If deptParent Is Nothing Then      '賦初值。
      Set mdeptParent = NewParent   
Else      
Err.Raise Number:=vbObjectError + 32144,
Description:="Parent property is read-only"
  End If
End Property當(dāng)訪問 Account 對(duì)象的父對(duì)象時(shí),例如通過代碼 strX = acctNew.Parent.Name 獲取部門名稱,Property Get 被用于返回對(duì)父對(duì)象的引用。
該示例中,編入 Property Set 是為了使 Parent 屬性只能被設(shè)置一次。例如,當(dāng) Department 對(duì)象創(chuàng)建一個(gè)新的帳號(hào)時(shí),可以執(zhí)行代碼 Set acctNew.Parent = Me 設(shè)置屬性。此后,該屬性為只讀的。
詳細(xì)信息   因?yàn)樵?Visual Basic 中窗體是類,故可向窗體添加用戶屬性。請(qǐng)參閱本章前面“定制窗體類”的內(nèi)容。


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日产精品久久久一区二区 | 一级片观看| 欧美顶级黄色大片免费 | 亚洲国产精品成人无久久精品 | 国产精品成人国产乱 | 国精产品一区二区 | 韩日中文字幕 | 四虎影院在线免费观看 | 亚洲一区二区在线视频 | 久久这里都是精品 | 国产一区高清 | 国产精品毛片va一区二区三区 | 黄色中文字幕 | 国产精品久久久国产盗摄 | 午夜视频免费看 | 亚洲二三区 | 欧美性猛交xxxx黑人交 | 天堂99| 久久久久久久免费视频 | 国产精品毛片一区视频播 | 福利视频网址 | 欧美日韩国产中文 | 日韩久久精品 | 天天操天天干天天操 | 国产在线观看网站 | 三级免费网站 | 亚洲在线免费 | 亚洲一级大片 | av不卡在线| 国产中文在线 | 91玖玖| 超碰在线视屏 | 国产精品一区二区久久 | 欧美激情视频一区二区 | 狠狠干夜夜 | 免费的一级片 | 国产三级黄色片 | av在线免费观看网站 | 亚洲黄色成人 | 欧美视频精品 | 在线视频日本 |