這段時間由於接觸到MVC,也知道了Class的運用方式,遭遇到了事件的設計。
其實具體的事件設計方式我也不是很明白,在QQ裏newskyline跟我說了,ASP沒辦法作Class的事件,只能模擬。而我呢。算是爲達目的不則手段(寫程序而以)的,認爲模擬也好,非模擬也行,只要達到我想要的效果就是好東西。
模擬事件的方式有兩種
第一種:借用了execute/eval,用一個屬性收取函數名的字符,然後使用execute/eval來運行函數。
如:
obj.OnDataUpdateStart="CheckData"
其構造爲:
public property let OnDataUpdateStart(byval A_strValue)
'在此省略了對A_strValue的一些嚴謹的驗證代碼。
p_strOnDataUpdateStart=A_strValue
end property
事件是觸發爲:
public sub DataUpdate()
'...忽略過程...
execute(p_strOnDataUpdateStart & "(參數變量一,參數變量二)")
'...忽略過程...
end sub
稍微提一下execute和eval的不同點。
同樣的“x=y”。execute("x=y")的結果是將y值賦給x,而eval("x=y")則會返回一個Boolean值,表示x與y的測試結果,如x等於y則返回true,反之返回false。
第二種:借用函數指針GetRef,在vbs手冊的解釋上來看就是綁定事件專用的函數。具體解釋如下:
“返回一個指向一過程的引用,此過程可綁定某事件。”
具體運用例子,如:
obj.OnDataUpdateStart="CheckData"
其構造則改爲:
public OnDataUpdateStart '其實可以使用get/let模式,想偷懶了,所以直接聲明一個公開變量來傳遞了。
事件觸發則改爲:
public sub DataUpdate()
'...忽略過程...
set me.OnDataUpdateStart=GetRef(OnDataUpdateStart)
me.OnDataUpdateStart("參數變量一","參數變量二")
'...忽略過程...
end sub
以上兩種方式可以實現事件綁定,但是,從解釋上來說,我比較推崇第二種,相對於execute/eval來說更爲嚴謹一些。
明天玩了一天的結論,在此作個記錄。希望對看過文章的人有用,如有什麼問題可以到我的Blog(http://blog.csdn.net/oyiboy/archive/2006/02/10/595939.aspx)裏來聊聊。
閒話:歡迎各位有手機的朋友到我的“海魚手機加瓦站(http://wwww.fishjava.com)”來轉轉,有不少的免費的手機遊戲和圖片提供給各位,不但可以在線試玩遊戲,直接通過WAP下載遊戲和圖片,還能自己上傳一些好玩的遊戲或圖片上來大家一起來玩。