激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP教程 - ASP面向對象編程探討及比較

ASP面向對象編程探討及比較

2019-10-18 11:12asp編程網 ASP教程

ASP是Microsoft于較早期推出的動態網頁編程技術,但其結合ADO對數據庫方便快捷的訪問、結合XML、COM/ActiveX等其它技術實現服務器多層結構的功能使它在今天還有著頑強的生命力,并且依然有著一定的發展。ASP.Net雖然在架構上完全不

ASP是Microsoft于較早期推出的動態網頁編程技術,但其結合ADO對數據庫方便快捷的訪問、結合XML、COM/ActiveX等其它技術 實現服務器多層結構的功能使它在今天還有著頑強的生命力,并且依然有著一定的發展。ASP.Net雖然在架構上完全不同于ASP,但它很多內建對象也是基 于ASP進行擴展的。網上有無數的介紹ASP的文章,卻鮮有介紹ASP面向對象以及與其它語言比較的,這也就是我下決心寫這篇文章的原因。 
  因為是早期的版本,ASP只提供了很弱的面向對象的接口。眾所周知,ASP的實現語言分為VBScript和JavaScript/JScript: 在VBScript中有Class關鍵字,可以用來聲明一個自定義類;JavaScript就比較怪,它用一個函數來“聲明”類,然后在該函數里通過 this.prototype定義屬性,this.func定義方法。這里將以VBScript為主進行討論,VBScript的類聲明是這樣的: 
  Class name 
      statements 
  End Class  
  這里statements里可以聲明公有或私有的成員,包括函數、成員和屬性。關于屬性,不得不贊一下微軟的get和set方法,這個在COM中出現 的理念,直到.Net中一直被沿用下來,個人認為對程序員而言,比Java用getProp()、setProp()兩個方法來實現同樣效果要方便直觀得 多。 
  相比之下,VBScript中的類與PHP4中的類各有千秋(當然跟最新的PHP5沒法比),VBScript中的類保持了VB的不完全面向對象的 “特性”,它僅僅實現了最基本的構造/析構函數、成員函數、變量、屬性,甚至構造函數不能帶參數。PHP4中則還實現了繼承、函數重載等類的重要性質,也 只有實現了這些,才能稱之為面向對象,才有可能為實現多態提供基礎。但二者均沒有實現類的靜態(static)成員等功能。盡管可以用其它一些變通達到同 樣的功效,但從面向對象的思想出發,這都是不徹底的(由于PHP非常靈活,PHP4中可以通過成員函數的靜態變量來間接實現類的靜態變量;而“::”—— 可以實現類的靜態函數訪問的操作符——在PHP4中沒有嚴格檢查。換句話說,所有的成員函數都可以當成靜態函數訪問,只要你在該函數里不使用成員變量就不 會出錯。VBScript根本沒有實現static,只能用Session或Application來實現)。所以在平常的使用中,你可以使用 VBScript的自定義類來封裝一些操作,但不要指望它像C++ / Java / .Net那樣為你的面向對象思想服務。 
  VBScript同樣發揚了VB中默認的參數或變量是引用的好風格。這樣,盡管Script語言中對類型不敏感,但它還能夠達到C/C++里指針/引用同樣的功效,完成很多事情。最基本的,比如說用它定義一個列表(List)的節點類ListNode: 
<% 
Class ListNode 
    Public Content 
    Public NextNode 

    Private Sub Class_Initialize() 
        Content="Node" 
        Set NextNode=Nothing 
    End Sub 
End Class 
%> 
  呵呵,就這么簡單,但不要感到鄙夷,也不要忘記對變量初始值。VB中也差不多,聲明時加上類型就行了。而使用時: 
<% 
Set nh=new ListNode 
Set nh.NextNode=new ListNode 
'其它語句…… 
'遍歷列表 
Set n=nh 
While Not n is Nothing 
    Response.Write n.Content+"<br />" 
    Set n=n.NextNode 
Wend 
%> 
  如果不加其它代碼,上面的運行結果是兩個“node”。VBScript的自定義類和對象也不外如是,只要你掌握基本的概念,對它有一定了解,就再簡單不過了。再次強調,用Set語句來對對象進行賦值,相當于Java里的賦值,都是獲得一個引用。這比PHP4里默認對象賦值是調用拷貝構造函數來創建一 個新的對象好多了(甚至連obj=new Obj;這樣的語句都會創建兩個對象!如果你想獲得引用的話,要在等號后變量前顯示地加上&),而似乎PHP5也不想修改PHP4的這種做法。 
  ASP中的Session本身是可以儲存對象的,它可以保存基本變量,數組,自動化對象(Automation Object)等,但在儲存自定義類的對象時會碰到問題。如下面的代碼: 
<% 
If isempty(Session("node")) Then Set Session("node")=New ListNode 
Set n=Session("node") 
Response.Write n.Content 
%> 
  還是上面的ListNode這個類,這段代碼意圖在一個用戶會話中只保留一個ListNode的對象。所以在用戶第一次訪問該網頁時,會生成ListNode的一個對象,并保存在Session(“node”)中;后面訪問該網頁時,因為Session(“node”)不為空了,所以不會生成一個新的對象,而是到 Session(“node”)中取出保存的對象。理論上應該也會輸出100,但是問題來了,ASP一直會報錯: 
  Microsoft VBScript runtime error '800a01b6'  
  Object doesn't support this property or method: 'n.Content' 
  用n.Type也會出錯。同樣的代碼翻譯成PHP,運行卻是可以通過的。為什么? 
  個人分析下來,認為Session可以保存對象是沒錯,只是VBScript中類型轉換的機制太弱,而且沒有顯式的強制類型轉換供用戶使用,無法將 Session(“node”)正確轉換為ListNode類型。因為是自定義的類,我們只能在每個頁面中都出現類的定義語句,這樣在ASP看來,每次讀 取這個頁面時,ListNode類都是一個新類,所以就不認得Session中的這個類的對象了。 
  結論:盡量不要想到用Session或Application來存儲ASP中自定義類的對象。如果確實需要,可以考慮用COM來編寫類,然后在VBScript中用:Set Session("obj") = Server.CreateObject("YourApp.YourClass")來創建一個對象,然后即可實現上面預想的功能了。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 女人久久久www免费人成看片 | 国产午夜精品一区二区三区嫩草 | 亚洲伊人色欲综合网 | 精品一区二区久久久久久按摩 | 羞羞答答视频 | 欧美精品免费一区二区三区 | 久久久入口 | 91av大片| 成人偷拍片视频在线观看 | 悠悠成人资源亚洲一区二区 | 一级外国毛片 | 色网站免费观看 | 亚洲国产高清视频 | 亚洲精品日韩色噜噜久久五月 | 色妹子久久 | 婷婷久久青草热一区二区 | 国产成年人小视频 | 91久久国产综合精品女同国语 | 国产亚洲精品久久午夜玫瑰园 | 国产精品看片 | 亚洲第一视频 | 亚洲国产成人久久成人52 | 成人乱码一区二区三区不卡视频 | 91aa.app| 美国av免费看 | 久久99精品久久久久久秒播蜜臀 | 久久成人免费网 | 久久艹艹艹| 久久国产精品二国产精品 | 蜜桃传媒视频麻豆第一区免费观看 | 亚洲欧美日韩一区二区三区在线观看 | 国产精品久久久久久久四虎电影 | 成人免费av在线 | 免费视频精品一区二区 | 蜜桃一本色道久久综合亚洲精品冫 | a黄网站| 亚洲最新黄色网址 | 男女无遮挡羞羞视频 | 国产又白又嫩又紧又爽18p | 毛片免费观看日本中文 | 欧美成人精品一区二区三区 |