第1章∣ASP.NET程式設計模型
P.10
值得留意的是,在標頭與字文之間的空白行是標準的一部分。
P.36
Interfaces vs. Base Classes
P.57
擴充方法是定義成靜態類別的靜態方法。方法(例如IsDate)與型別(例如System.String)之間的繫結,是透過方法原型裡面的關鍵字this來建立的:
public static bool IsDate(this string content)
跟在關鍵字this之後的型別會被當作是要擴充的型別。
擴充方法會在編譯期間被檢查,並且可以被套用到.NET Framework裡面的任何父類別或介面。
P.67
請想像你有個像下列這樣的欄位:
private int _counters;
從某方面來看,你可能會發現功能完整的屬性會更合適。相較於自己輸入程式碼,你只需要選取這一行,然後透過重構去封裝這個欄位就可以了。很明顯就是「重構」→「封裝欄位」這個功能表選項了。非常神奇地按一下,舊的程式碼就會變成如下所示:
public int Counters { get { return _counters; } set { _counters = value; } }
P.105
在IIS 6.0處理模型,ASP.NET會忽略machine.config檔案<processModel>區段的大部分內容。machine.config檔案的<processModel>區段裡會被讀取的部分只有執行緒和死結(deadlock)的設定。其他的資訊都來自於中繼庫,而且只能夠透過IIS管理員加以設定。(其他的組態資訊會繼續從別的.config檔案讀取。)
P.115
處理指示詞的語法非常獨特,通用於所有支援的指示詞類型。若有多個屬性則要用空白分隔開來,等號(=)兩側在指派數值時不能插入空白,下列是一行示範程式碼:
<%@ 指示詞名稱 屬性="數值" [屬性="數值"...] %>
P.150
任何操作都可以被粗略地分成兩類:CPU-bound或I/O-bound。CPU-bound表示某個操作的完成時間取決於處理器的速度和可用的記憶體容量。而I/O-bound則是指相反的情況,亦即CPU大部分時候是在等待其他裝置結束。
如果在I/O-bound操作上面套用非同步模型的話,將可以獲得不少的實質效能優點。
P.156
從ASP.NET 2.0開始,Button類別裡便多了新的屬性UseSubmitBehavior,可以讓網頁開發人員控制相對應的HTML元素的用戶端行為,儘可能做到像表單送出一樣。在ASP.NET 1.x裡面,Button控制項總是輸出<input type="submit">元素。而在ASP.NET 2.0及之後版本裡面,藉由設定UseSubmitBehavior為false,將可以把輸出變成<input type="button">,而同時又將此用戶端元素的onclick屬性繫結到剛才回傳過來之預先定義好的指令碼程式。
P.174
要如何確定既定的網頁或自訂控制項會呈現XHTML標記呢?必須透過某種服務來執行網頁,然後檢查其輸出。舉例而言,可以使用W3C標記驗證服務(W3C Markup Validation Service),網址是http://validator.w3.org。這套驗證工具有兩種使用方法:輸入網頁的URL,使之產生要求藉以檢查網頁輸出;或者上傳網頁到這套驗證工具的網站。
P.177
必須注意的是,伺服器端ID屬性會擴充成一對HTML屬性──Name和ID。因為這與瀏覽器能力有關。並不是說伺服器端的Name和ID可以交互用來命
名控制項實體。伺服器控制項實體的名稱是由ID給定的。如果同時在伺服器端標籤裡面指定Name和ID,指派給Name的數值才會默默地被覆寫掉。
P.182
string meta = "<meta http-equiv='refresh' content='3' />";
LiteralControl equiv = new LiteralControl(meta);
((Control) Header).Controls.Add(equiv);
必須明確地將Header屬性所傳回的物件轉型成Control。這是因為Header屬性被宣告成IPageHeader形式,並未包含Controls屬性的定義。
P.195
ASP.NET可以在進行大量資料上傳時進行一些控制。位於組態檔案
當檔案超過指定的大小(預設是4MB)時,瀏覽器上將會看到錯誤。上傳大型檔案還可能因為消耗太多系統記憶體而產生其他的執行階段錯誤。
P.240
鮮為人知的事實是,只要一次只有一個是可見的,Web表單實際上也可以視需要包含多個伺服器端表單。舉例來說,一個網頁可以擁有三個<form runat=server>標籤,卻只有一個表單可以實際呈現。一旦有超過一個HtmlForm控制項企圖要呈現,便會丟擲例外。