我們現在要來詳細討論建構子的作用與功能,建構子的主要目的在於建立物件的過程中,也就是使用 new 關鍵字 (keyword) 的時候,程式 (program) 所執行的工作,這些工作通常就是設定物件的屬性 (property) 。
如果類別沒有定義建構子,編譯器會提供預設預購子,預設建構子為沒有參數 (parameter) 的版本
public Encrypt() {}
建構子可以依需求而有不同的參數版本,例如, Encrypt 中我們需要以下屬性
string cArray;
我們之前用 setArray() 建立 cArray ,此時,可以直接將 setArray() 更改為建構子
public Encrypt() { System.Random r = new System.Random(); int a = 0; int b = 0; // 限定 a 為偶數 while (a % 2 == 0) { a = r.Next(1, 10); b = r.Next(1, 10); } System.Console.Write("a: " + a + ", b: " + b + ", "); int x, y, m; char c = 'a'; int i; System.Text.StringBuilder s = new System.Text.StringBuilder(); for (i = 0; i < 26; i++) { x = c; y = x * a + b; m = y % 26; s.Append((char) (m + 97)); c++; } this.cArray = s.ToString(); }
建構子是一種特別的方法 (method) ,沒有回傳值 (return value) ,因為建構子就是用來建立類別的物件。也可以像方法一樣有不同的參數版本,不過這裡我們採用沒有參數版本的建構子就可以了。
完整的 Encrypt 如下
class Encrypt { string cArray; public Encrypt() { System.Random r = new System.Random(); int a = 0; int b = 0; // 限定 a 為偶數 while (a % 2 == 0) { a = r.Next(1, 10); b = r.Next(1, 10); } System.Console.Write("a: " + a + ", b: " + b + ", "); int x, y, m; char c = 'a'; int i; System.Text.StringBuilder s = new System.Text.StringBuilder(); for (i = 0; i < 26; i++) { x = c; y = x * a + b; m = y % 26; s.Append((char) (m + 97)); c++; } this.cArray = s.ToString(); } static void Main() { Encrypt e = new Encrypt(); System.Console.WriteLine("e: "+ e.cArray); } } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:encrypt.cs 功能:示範 C# 程式 作者:張凱慶 時間:西元 2012 年 10 月 */
編譯結果如下
這裡,我們在 Main() 中直接用句點運算子存取屬性 cArray ,其實不一個好習慣,因為如此物件的資料就曝光在世人面前,任何人都可以透過句點運算子存取,甚至更改屬性值,造成難以彌補的後果,從而失去資訊隱藏 (information hiding) 的意義。
因此,我們應該將屬性設成 private ,然後以 set 與 get 進行操作哩!
中英文術語對照 | |
---|---|
物件 | object |
建構子 | constructor |
類別 | class |
編譯器 | compiler |
建構子 | default constructor |
關鍵字 | keyword |
程式 | program |
屬性 | property |
參數 | parameter |
方法 | method |
回傳值 | return value |
資訊隱藏 | information hiding |
您可以繼續參考
軟體開發
相關目錄
回 C# 入門指南
回 C# 教材
回首頁
參考資料
http://msdn.microsoft.com/zh-tw/library/ms173109%28v=vs.80%29.aspx
http://msdn.microsoft.com/zh-tw/library/x9afc042.aspx
http://msdn.microsoft.com/zh-tw/library/ms229036%28v=vs.80%29.aspx
http://msdn.microsoft.com/zh-tw/library/0b0thckt.aspx
http://msdn.microsoft.com/zh-tw/library/ace5hbzh%28v=vs.80%29.aspx
http://msdn.microsoft.com/zh-tw/library/ms173115%28v=vs.80%29.aspx
http://msdn.microsoft.com/zh-tw/library/k6sa6h87%28v=vs.80%29.aspx
沒有留言:
張貼留言