這一篇入門教學距離上一篇([入門] .Net 非同步處理與同步機制全解析 (一))已經有足足三年多的時間。之所以延宕那麼久, 主要是因為微軟已經開始提供平行處理及非同步機制的功能更新; 許多功能及用法不停地出現, 連我自己都搞不清楚, 所以我也沒辦法繼續著手這一系列文章。
直到 .Net Framework 4.5 開始, 我覺得應該可以算是一個適當時機, 可以繼續來寫這個系列文章了
這一篇入門教學距離上一篇([入門] .Net 非同步處理與同步機制全解析 (一))已經有足足三年多的時間。之所以延宕那麼久, 主要是因為微軟已經開始提供平行處理及非同步機制的功能更新; 許多功能及用法不停地出現, 連我自己都搞不清楚, 所以我也沒辦法繼續著手這一系列文章。
直到 .Net Framework 4.5 開始, 我覺得應該可以算是一個適當時機, 可以繼續來寫這個系列文章了
很多事情都是必須遇到了才會重視。使用 Master Page 是每個 ASP.NET 程式設計師都必須了解、甚至精通的; 我也一直覺得我對這部份的技術非常精通, 直到我在最近設計的網站遇到某個比較少用到的功能, 才發現有很多事情並沒有原先想像的那麼直覺。什麼事情呢? 就是我原本放置在 Master Page 部份的控制項, 如果我必須在 Content Page 處理它的事件, 應該怎麼做?
一開始, 我覺得這不應該是個問題, 但是真正下手之後, 才發現解法並沒有那麼直覺。經過明查暗訪, 終於找到了解決的方法, 如果你剛好也遇到這個問題, 不妨參考一下我的解法。
其實解法講穿了就沒什麼學問了! 因為它根本就和我在「[入門文章] ASP.NET 事件與委派詳論」一文所描述的做法幾乎是一模一樣的, 但是在這個問題中另外有個關鍵點, 請稍為留意。
首先, 建立一個名為 mp.master 的 Master Page 檔案, 並在裡面放置一個按鈕物件 (Button1), 設定它的 Click 事件處理函式 (Button1_Click). 然後再建立一個 Web Form (例如稱為 Default2.aspx), 並指定它的 Master Page 檔案為 mp.master。
在 mp.master.cs 中加入以下程式碼:
差不多每隔一段時間, 就會看到有人又重覆的詢問這個問題, 或者雖然沒有問到這個問題, 卻不停的懷疑為什麼在某些網站可以做的事情, 在另一個網站上面卻不行。其實這些問題通通必須回歸到一個最基本的問題, 那就是請你恢復一下記憶, 你在一開始是用什麼方式建立你的網站的?
不管你學的是何種程式語言, 非同步及平行處理總是最令人費解的部份之一。如果你沒有過人的邏輯觀念, 那麼要把非同步程式寫好, 恐怕有一定的困難度。不過最難的部份不在技術上, 而是到底在何種場合下可以採用非同步或平行處理。在日常生活中, 我們採用的邏輯大多是循序進行的, 也就是說, 等到前一件事情完成之後, 才去進行下一件。但是在某些情況下, 非同步處理是比較合乎情理的做法。
我可以理解為什麼我老婆開了十年的同樣一部車, 都不知道原來在 N 檔和 D 檔之間切換可以不必去按那個安全鈕; 但是我卻無法理解為什麼有一個已經寫了好幾年 .NET 程式的人, 在這輩子中竟然沒有寫過任何一個自訂型別。對這件事, 我唯一想得到的解釋, 就是從來沒有人跟他說過自訂型別的好用之處。
所以, 這件事也讓我決心把自訂型別特別整理成一個主題。雖然我在本文中會用到一些進階技巧, 對真正的初學者而言恐怕有點吃力, 但是這畢竟是 .NET 中很基礎、很一般的常識, 所以我還是把它歸類到「入門文章」裡面
單元測試 (Unit Test) 是一個很基本的工作, 如果你使用 Visual Studio 做為開發工具的話, 建立單元測試專案是一件再簡單不過的事了。不過, 除非你已經對單元測試很熟悉, 否則有些最基本的概念, 你最好能事先熟悉一下
在 .Net Framework 中,Array 可以說是每個程式設計師最常使用的 Type 之一。不過即便你每天都在使用 Array, 你或許還沒有仔細的把它研究過。其實如果好好使用 Array 物件, 在許多情況之下可以增加我們的生產力。
Array 的宣告
陣列總共可以分為四類:
一維陣列 (Single Dimension Arrays) -
這是我們最常使用的陣列, 其宣告方式如:
我當過電腦講師、寫過不少文章、也在國內外各個 ASP.NET 討論區轉戰了好幾年, 接觸過無以數計想學網站設計的新手或學生。在這麼多人裡面, 我大致上可以歸納出一種或少數幾種性質蠻接近的族群, 這些人有共同的特色、遇到相同的問題、也有相同的盲點。我現在要在這裡給這些人提供幾點小小的建議。
這些人有個共同的特色, 那就是不完全清楚網站運作的基本邏輯。我時常喜歡打個比方: 以電視 (尤其是陰極射線管的電視) 為例, 我們在看電視時, 總以為電視上的圖像總是永遠是連續的, 但其實電視的畫面是從上到下、從左到右一點一點畫出來的, 每秒畫三十幀 (略估), 然後靠畫面上螢光物質的暫時殘留現象, 讓人眼 (其實人眼也有視覺殘留效應) 看不出來它其實是每秒三十次一直重畫的。
在這裡我先假設你已經知道所謂物件導向程式設計的原理, 所以我不會浪費篇幅重複的解釋 OOP 是什麼。但是如果你來到這裡的目的是希望看到最基礎的 OOP 原理, 那麼我建議你去書局買一本適合的書回去慢慢研究, 或者上網從 WIKI 開始看起。
我在這裡想要介紹給 ASP.NET 新手的, 主要在於 OOP 的實踐方式, 以及應用時機。
在 .Net Framework 的基礎領域中, 事件處理模型一直是令人頭痛的一環。倒不是因為它真的有什麼難度, 而是因為 .Net Framework 稍嫌麻煩的處理方式, 以及它的一些難懂的特殊用語, 有時候還真的會讓人搞得眼花潦亂, 甚至退避三舍。
在這裡, 我要試圖使用最簡單、最白話的方式把 .Net Framework 對於事件與委派的設計原理重新描述一遍。我相信如果你很仔細的看過一遍, 就再也不會對這個主題心存疑惑了。
Enum 通稱為「列舉型別」, 在 .Net 中應該可以算是一門顯學, 意思就是說絕大部份 .Net 開發者都知道有這個東西, 也一定會用。不過對於許多初學者來說, 他們知道列舉型別, 也會用, 卻不一定知道列舉型別用在什麼地方、有什麼好用之處。所以在這篇文章裡, 我除了向各位介紹 Enum 如何使用之外, 也會告訴你它的好用之處
在本節中我將介紹對於 XML 資料最重要也最常用的技巧, 也就是所謂的巡覽 (navigation)。我所說的巡覽至少包括兩個部份, 一是定位/搜尋想要找的節點和資料, 二是在樹狀結構資料中以一個節點一個節點的方式向前或向後巡迴停駐。
在本文中, 我仍將採用在上文中所建立的簡單 XML 資料以做為範例:
在本文中我將示範以不同的方式從無到有的建立一份 XML 文件。
使用 XmlDocument 物件
首先, 我們可以使用 XmlDocument 物件來一個節點一個節點的建立起 XML, 如下例:
ASP.NET 的初學者, 一旦學到了 Validator 控制項, 就會踫到 Regular Expression 這個主題。Regular Expression 指的是一種檢驗文數字的表示式, 早在 ASP.NET 出現之前就已存在, 而且也不是 ASP.NET 所專有。大多數主流程式語言 (包括 Java、JavaScript、Ruby、PHP 等) 都可以透過 Regular Expression 來驗證輸入。
不過, 除非你早就了解 Regular Expression 是什麼, 否則當你一開始遇上它時, 可能會被搞得一頭霧水
DataTable 是 ADO.NET 的核心物件。如果你想學好 ADO.NET, 你絕對避免不了接觸到 DataTable。如果你過去曾經透過網路上的片段知識學到了你以為足夠的 ADO.NET 知識, 卻對以 DataTable 為始的基礎概念沒有深刻的認識, 那麼我建議你下一些苦工, 就從這一篇文章開始, 重新把底子建好。
在這裡, 我必須假設你對資料庫的基本知識已經有了清楚的認識, 否則你應該回頭先去讀讀這方面的書籍。相反的, 如果你已經對資料庫原理瞭若指掌, 那麼你一定對以下的內容感覺到異常的容易。因為 DataTable 本身幾乎就是資料庫裡面 Data Table 在記憶體中的翻版, 如果你懂資料庫, 你對 DataTable 絕對沒有任何難以理解之處。
離線式資料操作 (Disconnected Data Operation)
對於想要開發 Regular Expression 的人, Expresso 是一個很好用的工具,不但可以即時製作 Regular Expression 字串,而且可以立即驗證、測試。你可以在 Ultrapico 網站 下載最新版本(如該頁所顯示的, 你必須先在 註冊頁中註冊,才能取得一個免費的註冊碼, 否則只能試用 60 天)。
只要你用過 Visual Studio,你一定知道工具箱 (Toolbox) 是用來放置控制項 (Controls) 的地方;無論是寫網頁程式或視窗應用程式,你都可以從工具箱裡面把控制項以拖曳的方式拉到頁面上來使用。
可是當你在編寫文字檔案或程式(包括 .txt、.config、.vb、.cs 等等),你知道你也可以使用工具箱來提高你的產能和效率嗎?
一般來講,你應該知道從 VS2005 開始,我們可以使用程式碼片段 (Code Snippets) 來加入一些時常用到的程式碼,可是我現在要告訴你,你只需要在編寫程式或文字檔案時,把一段文字標示起來並拖曳到工具箱裡面,它就會自動記錄在工具箱箱,以後你可以再以拖曳的方法把這段文字複製到其它地方。
甚至,你也可以加入不同的索引標簽以將不同的程式碼片段或文字進行分類。以這種方式,其方便性應該可以取代 Code Snippets 了吧!
Unicode 是為了因應多語系互通與共存而產生的。好玩的是,我看過很多人把它誤寫成 Unitcode,這是對於這個通用碼的不了解。它其實是 Universal Code 的縮寫,所以我們說它叫做「萬國碼」。
在純西歐語系的環境下,最常用的電腦編碼標準有三種:
如果不使用 ASP.NET,你可以用來寫網頁的程式語言其實並不算太多。在 ASP.NET 出現以前,大家最常見的莫過於 ASP/VB、Java 和 PHP,至於幾乎沒人使用的 CGI、Perl 等就先略過。不過從 ASP.NET 之後,又多出了 Visual Basic.NET、C# 和 J# 等等。你或許會覺得奇怪,什麼叫做「從 ASP.NET 之後,又多出了 Visual Basic.NET、C# 和 J# 等等」?難道 ASP.NET 本身並不是一種程式語言嗎?
對,可以這麼說。ASP.NET 本身並不是程式語言,而是一個執行環境,算是 Microsoft .NET Framework 的一部份。那 .NET Framework 又是什麼呢?它是一組附加於作業系統的底層程式庫(Library)。所以基本上,你只要安裝了 .NET Framework 1.X 或 2.0/3.0/3.5/4.0,再加上 IIS 網站伺服器,你就能執行 ASP.NET,就能啟動作業系統中的網站功能。
我時常看到初學的程式設計師,一天到晚在使用最古老的方法來進行程式的除錯。當然,我們知道最常見的方法,就是不斷的輸出字串,把變數內容輸出到畫面之上。其實這個方法不但是老掉牙的方法,而且是非常沒有效率的方法。
在這裡,我要介紹一個非常、非常簡單的指令,那就是 Debug.Write 或 Debug.WriteLine 指令。它會把訊息留在 VS 的 Output 視窗中,一點都不會影響到網頁。換句話說,你即使在程式交付之後,也可以不用修改你的程式。因為這些除錯訊息根本不會出現在網頁上,所以你根本可以把這些指令留在程式裡面。