日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

在VBScript中使用類(三)

 Ansion 2006-04-16

我們來分析一下(2)中的程序:

class tvprogram

               public starttime

               public internal_programdate

               public property get programdate
                       programdate = day(internal_programdate) & _
                               " " & monthname(month(internal_programdate)) & _
                               " " & year(internal_programdate)
               end property

               public programtitle

end class

        dim objtvshow
        set objtvshow = new tvprogram
        objtvshow.starttime = cdate("17:30")
        objtvshow.internal_programdate = dateserial(1999,9,17)
        objtvshow.programtitle = "the jerry springer show"
        response.write objtvshow.programtitle & " is on at " & _
        objtvshow.starttime & " on " & objtvshow.programdate & "."

    當(dāng)調(diào)用對象的屬性programdate時(shí),實(shí)際上執(zhí)行了函數(shù)programdate,即如上定義的函數(shù),而很快你也將習(xí)慣這種在聲明部分使用public或private關(guān)鍵字的方式。關(guān)鍵字“property”,告知了編譯器如同調(diào)用屬性一樣在外部調(diào)用函數(shù)。接著的“get”,表明該函數(shù)是輸出還是獲得一個(gè)值。

    get的意思是“允許外部代碼去‘獲取’一個(gè)值”,與其類似的關(guān)鍵字還有“let”和“set”,但這兩個(gè)比較復(fù)雜,因而我們以后再討論。

    接下去的代碼看來有點(diǎn)難度的,給objectname.internal_programdate賦值并通過objectname.programdate來調(diào)用它。如果可以使用相同關(guān)鍵字同時(shí)為其賦值并獲得它的值不是更好嗎?當(dāng)然,那也可以。

    如果定義get和let屬性的名稱相同,可以將它們當(dāng)作對象相同的屬性,但這只限于它們定義了相同數(shù)量的成員。(以下代碼看來不太相同,僅作為實(shí)例參考)

class tvprogram

               public starttime

               public internal_programdate

               public property get programdate
                       programdate = day(internal_programdate) & " " _
                               & monthname(month(internal_programdate)) & _
                               " " & year(internal_programdate)
               end property

               public property let programdate(byval vardatein)
                       internal_programdate = cdate(vardatein)
               end property

               public programtitle

end class

 

        dim objtvshow
        set objtvshow = new tvprogram
        objtvshow.starttime = cdate("17:30")
        objtvshow.programdate = "17 sept 99"
        objtvshow.programtitle = "the jerry springer show"
        response.write objtvshow.programtitle & " is on at " & _
        objtvshow.starttime & " on " & objtvshow.programdate & "."

 

    以上代碼中l(wèi)et的聲明部分看來似乎是一個(gè)多余的元素,當(dāng)我第一次看到時(shí)研究了很長時(shí)間。每次我使用“0”作為變量用在每個(gè)屬性上,我總是得到這個(gè)錯(cuò)誤信息,“元素?cái)?shù)量必須相等”。“它們確實(shí)相等!”抓狂之后,我回過頭去看程序才覺得自己的愚蠢?。海?/span>

    原因是,當(dāng)你試圖為programdate賦值時(shí),你會(huì)使用這樣一行程序:

objtvshow.programdate = dtmmydate

    為了方便,等號右邊的值(這里指dtmmydate)作為了一個(gè)程元賦給了函數(shù)。因此編譯器可能會(huì)認(rèn)為在get programdate行有0程元,而let programdate卻多一個(gè)!分配的值總是被略過而作為屬性的最后一個(gè)程元,所以即使你使用其他程元,所賦的值總是作為最后一個(gè)程元。

    現(xiàn)在看程序。無論通過programdate設(shè)置日期為文本形式,還是用internal_programdate譯成日期變量,程序都沒有問題。但能不能只使用一個(gè)入口呢?

    如果internal_programdate只能在內(nèi)部有效,而使用let programdate檢查傳輸?shù)臄?shù)據(jù)類型,我們就可以作出選擇。例如:

class tvprogram

               public starttime

               private internal_programdate

               public property get programdate
                       programdate = day(internal_programdate) & " " & _
                               monthname(month(internal_programdate)) & _
                               " " & year(internal_programdate)
               end property

               public property let programdate(byval vardatein)
                       if isdate(vardatein) then
                               internal_programdate = vardatein
                       else
                               ‘place some error handling code in here.
                       end if
               end property

               public programtitle

        end class

    并同樣聲明starttime屬性:

class tvprogram

               private internal_starttime
               public property get starttime
                       starttime = hour(internal_starttime) & ":" _
                               & minute(internal_starttime)
               end property

               public property let starttime(byval vartimein)
                       if isdate(vartimein) then
                               internal_starttime = vartimein
                       end if
               end property

               private internal_programdate

               public property get programdate
                       programdate = day(internal_programdate) & " " _
                               & monthname(month(internal_programdate)) & _
                               " " & year(internal_programdate)
               end property

               public property let programdate(byval vardatein)
                       if isdate(vardatein) then
                               internal_programdate = vardatein
                       end if
               end property

               public programtitle

        end class

  現(xiàn)在的代碼離我們想要的還是有些不太實(shí)用,我們將在其他頁使用類tvprogram,因此最好將其獨(dú)立定義,以便所有也面都可以調(diào)用。我們將在第四部分討論這點(diǎn)。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多