C#中的方法需要一個明確的方法簽名,簽名包括以下內容:傳回型別、方法名稱和參數列表。有時也包括訪問限制符。 簽名中的參數列表中的參數數目包括固定和不固定兩種類型,數目固定的情況是我們經常見到的,不固定的則是很少見的。 例如,當我們需要實現一個整數加法的時候,可能首先想到的是下面的形式:CodeCode highlighting produced by Actipro CodeHighlighter
.NET會將對象的值預設設定為0,對於實值型別來說,例如struct,我們無法阻止開發人員將結構體中的成員設定為0,因此,我們需要將0設定為有效狀態。 對於枚舉類型來說,如果通過new的方式建立一個枚舉類型的對象,那麼對象的值是0,代碼如下。代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 public enum
棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區。裡面的變數通常是局部變數、函數參數等。在一個進程中,位於使用者虛擬位址空間頂部的是使用者棧,編譯器用它來實現函數的調用。和堆一樣,使用者棧在程式執行期間可以動態地擴充和收縮。 堆,就是那些由 new 分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般一個 new 就要對應一個 delete。如果程式員沒有釋放掉,那麼在程式結束後,作業系統會自動回收。堆可以動態地擴充和收縮。 自由儲存區,就是那些
.NET中許多類都提供了兩種不同的途徑可以處理來自系統的事件,一方面我們可以使用事件處理器,另一方面我們可以重寫基類的虛方法。這兩種方式有各自不同的用途,在衍生類別中,我們應該使用重寫虛方法的方式,來處理系統事件。 關於上述兩種方式,我們看以下的代碼。代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 public class
泛型中,約束能夠為你和使用者完成兩件事情:1. 約束能將執行階段錯誤轉換成編譯時間錯誤;2. 約束為使用者清楚的給出了執行個體化型別參數所必須實現的功能。不過約束卻沒有能夠限制型別參數不能夠做什麼。好在大多數情況下,我們無需關係除了必要功能之外,型別參數還附帶了哪些額外功能。 但是如果泛型的約束中,包含了new約束,那麼我們需要查看泛型參數是否實現了IDisposable介面。 我們來看下面的代碼。代碼Code highlighting produced by
當我們將屬性置為唯讀後,就可以認為調用者對該屬性的值不可以變更了嗎?答案是否定的。對於實值型別來說,將其置為唯讀,確實可以讓調用者不能夠對其進行修改;但是對於參考型別來說,調用者還是可以調用引用對象的公有成員,包括那些可以修改屬性狀態的成員。 我們來看下面的代碼。代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1
我們的程式總是會出現各種各樣的問題,有時發生問題的環境並不在身邊,為了應付情況,我們需要懂得如何在系統啟動並執行過程中獲得儘可能多的資訊,.NET架構套件含了一些類,可以協助我們產生診斷資訊。這些類可以在運行時或者編譯階段進行配置,合理的運用它們,我們可以更快的發現問題。 這些類包括:Code highlighting produced by Actipro CodeHighlighter
事件為類型定義了外發介面,C#的事件是建立在委託的基礎上的,委託為事件處理器提供了型別安全的函數簽名。 委託要比事件的使用範圍廣泛,我們可以把事件看做是一種經過了封裝的委託,專門用於事件驅動模型。你可以在客戶代碼中直接調用委託來激發委託指向的函數,而事件不可以,你只能在服務端呼叫事件,在用戶端呼叫事件是會引發編譯錯誤的。我們來看下面的程式。代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http:/