2010年9月30日 星期四

C#語言欄位(field)與屬性(property)的比較

程式設計初學者若第一個語言學的是C語言,則學到C#語言的欄位(field)與屬性(property)時,會很容易將這兩者混淆。
  • 欄位就像是一般的變數,它與區域變數不同的地方在修飾詞的使用。因為欄位是類別或結構型態的成員,所以就需要設定成員存取修飾詞。而一般的區域變數宣告在方法之中,不需要也不能使用修飾詞。
  • 欄位與屬性在某種應用程度上是相同的,例如下列x與y,此二個成員在物件中使用時,並無差異。
  • // 欄位
    public int x;
    // 屬性
    public int y {get; set;}
    
  • 屬性是可以提供完整控制的變數,例如讓變數只能讀、或只能寫;讀寫時,能根據需要進行驗證或計算的工作。欄位則是單純的變數,可用readonly修飾詞設定唯讀,但是值不能有延伸變化。
  • 在實作時,屬性常為公用,並控制著一個私用的欄位,在下面例子中,公用屬性Price,提供價格的存取,取出時,另外加上5%的稅額。真正的值則存在私用欄位price中。
  • // 私用欄位
    private double price;
    // 屬性
    public double Price
    {
       get { return price*1.05; }
       set { price = value; }
    }
    
  • 欄位不能使用virtual, override, sealed, abstract等修飾詞,因此子類別繼承時,直接繼承欄位。屬性則可在子類別繼承後,再視需要予以變化。

2010年9月20日 星期一

作業一:簡易訂單作業

作業目的

程式邏輯練習與類別方法運用

作業內容

本作業在製作一個簡易的訂單處理系統,你必須在命名空間下設計一個結構為產品Product,一個類別為訂單Order。
產品包含
• 一個欄位表示產品名稱,命名 Name
• 一個欄位表示是否要附加 5% 營業稅,命名 Taxable
• 一個屬性表示產品價格,命名 Price
訂單包含
• 一個產品Product陣列,命名 ProductList
• 一個訂購數量int陣列,命名 AmountList
• 一個靜態欄位,紀錄全部訂單數量,命名 OrderCount
• 一個靜態方法,計算所有訂單加總後的金額,參數為一個訂單Order陣列,傳回double,命名 CalcTotalPrice
• 一個非靜態方法,計算單筆訂單的金額,無參數,傳回double,命名 CalcPrice
產品價格Price 設定時為原價,取出時是以Taxable欄位決定是否附加5%營業稅
訂單方法CalcPrice 在計算時,若單一商品數量超過(大於等於)10,則打九折;若超過(大於等於)25,則打八折計價
訂單方法CalcTotalPrice在計算時,若總金額超過5000時,則四捨五入到百位數,例如總價為6235元時,以6200元計價

輸出入格式

輸入第一行為題目數量n,n<=20,接下來會有n個題目;每一個題目的第一行為訂單的數量m,m<=30,接下來會有m筆訂單;每一個訂單的第一行為該訂單中筆數p,p<=10,接下來會有p筆產品訂購資訊,一筆產品訂購資訊在一行中有四項輸入值,分別為名稱、是否算稅(yes/no)、單價、與數量,並以空白相隔。
輸出時每個問題輸出每筆訂單的總額,與全部訂單的原價、稅額與總額,格式如範例。

範例

Input:
2
3
2
Apple no 45 10
Cup yes 99 50
1
Cup yes 99 15 
4
Cup yes 99 15
Apple no 45 8 
Banana no 25 30 
Coffee yes 150 35 
2
2
Apple no 45 8 
Banana no 25 25 
5
Apple no 45 14 
Banana no 25 5 
Coffee yes 150 16 
Ball yes 70 11
Cup yes 99 2
Output:
Case #1:
  Order #1 total price is 4563
  Order #2 total price is 1403
  Order #3 total price is 6773
  Order Total:12700
Case #2:
  Order #1 total price is 860
  Order #2 total price is 3896
  Order Total:4756

2010年9月17日 星期五

搶先試讀

C#程式設計學以致用

這本書在第二章以程式範例開始,介紹突破學習程式的第一個障礙。

請下載:初學者必讀的第2章

2010年9月6日 星期一

學寫程式的三個障礙

經多年程式設計教學與撰寫程式解決實際問題的經驗累積,再回頭檢視初學者學習程式設計常遭遇的障礙,將之歸納有三。
  • 障礙一:傳統數學與程式邏輯的混淆,如「等號」與「等於」在遭遇「x = x + 1」指令時,若認知錯誤將無法收拾後果。
  • 障礙二:無法將「問題」轉換成「邏輯」,每當問題出現在”如果”的敘述中,初學者很難將這些問題轉換成算術、比較或邏輯的條件句。
  • 障礙三:無法體會迴圈中變數的變化,因迴圈的重覆執行所產生迴圈中的變數變化,外觀上看不出來,也很難在心中體會其道理。

2010年9月5日 星期日

關於本書


國家圖書館出版品預行編目(CIP)資料

目錄
  1. 認識程式語言
  2. C#語言初探
  3. 運算子與運算式
  4. 選擇結構
  5. 循環結構
  6. 字串與陣列
  7. 類別與結構型態
  8. 欄位、屬性與方法
  9. 集合與列舉型態
  10. 錯誤與例外處理
  11. 繼承
  12. 介面
  13. 檔案輸出輸入
  14. 索引子與運算子
  15. 委派與事件
  16. 泛型