【程式學習之路:Day13】C#程式設計:方法、例外處理、物件導向概念
∎ 方法(Method)
▸傳遞陣列
傳遞陣列必須使用傳址呼叫CallRef
方法建立:Static void CallArray(ref int[] arr)
呼叫方式:
int[]myArray = {1,2,3} ;
CallArray(ref myArray)
練習:
▸方法多載
允許在類別中建立多個相同名稱的方法
程式會在執行階段自動判斷呼叫的方法
方法間參數數目及型態需不同
減少使用者命名的困擾
練習:
同樣名稱的函式,雖然參數數目不一樣,資料型態也不同,
但程式會自動判斷執行 。
▸區域變數與靜態變數
.區域變數
方法內宣告的變數,僅能在方法內使用
.靜態變數
-在宣告時加上static關鍵字
備註:某種程度上可視為全域變數,當你希望變數在各個地方都可以使用
-必須在方法外宣告
-在程式執行期間均存在
備註:由於靜態變數於執行期間都存在,所以當一開始宣告時,
程式就會在記憶體上找到一個空間存放變數,預設值為零,
建議還是要給初值。
∎ 例外處理(Exception)
▸甚麼是例外
.Exception :程式執行時,發生不正常執行狀態產生的事件
.例外處理 :使程式更加強壯(Robust) ,不易崩潰(Crashing)
.例外處理原則 :採「你丟我撿」的架構 ,由下往上傳遞
.分為三個區塊
try : (可能會發生錯誤的時候)
在此區程式碼檢查是否產稱例外、當產生例外時丟 出指定例外類型的物件
catch :(承接錯誤的狀況)
處理各種不同的例外狀況,可有一到多個不同的程式區塊
finally : (一定會執行)
可選擇的程式區塊、進行程式的善後,不論例外是否發生
▸例外處理程式敘述格式
▸常用的例外類別
▸常用的例外類別成員
練習:
產生錯誤的情況
加入try{}catch{}
加上Console.WriteLine(e.Message);
▸自訂例外處理- throw
▸自訂例外類別 — 繼承Exception
自訂例外處理訊息:Message
自訂例外處理訊息:ToString
∎ 物件導向概念(Object)
概念:建立物件,設定屬性及方法,類別必須實體化New後才能使用
New概念:將類別複製一份使用,與原類別是分開獨立的
▸物件的基本概念
物件的內容 :屬性(property) &方法(method)
物件的特性 :繼承(inheritance) ,複寫(Override) ,多型(polymorphism)
▸類別(Class) 類似樣板的概念,若沒有轉換為物件就無法使用
練習:設定一個Person類別,帶有Public變數Name及方法SayHello()
練習:承上延伸,加上自動屬性設定{get;get;}
將Public變數Name,改寫為屬性Name,即可編輯它的條件。
▸唯獨與唯寫屬性
.唯獨屬性:get
.唯寫屬性:set
▸修飾子
. public 修飾子:資料成員或方法可以讓其他類別存取或呼叫
. protected 修飾子 : 資料成員或方法僅能讓類別本身或者子類別存 取或呼叫
(繼承者)
. private 修飾子:資料成員或方法僅能在類別本身存取或呼叫
▸建構子
. 在物件一開始建立時便會執行
建構子與類別同名,例如 Person 的建構函式為 Person();
建構子沒有傳回值
建構子的方法支援多載(Overload)
▸this 參照子
.在類別的成員方法和建構子可以使用 this 關鍵 字參考目前的類別方法和變數 如果方法的參數列和類別變數名稱相同則
this.變數名稱表示是類別屬性
▸解構子(Destructor)
▸ 事件(Event)
流程步驟:
1.在類別內宣告事件,給程式引用,delegate宣告寫在類別外
2.在主程式內使用類別事件
3.建立 使用者自訂顯示方式static void showMessage(string message)
4.建立 物件,引用類別事件static void Main(string[] args)
5.在Main主程式內,設定car.SetSeed(120);
6.呼叫class Car中public void SetSeed(int speed),再呼叫 carevent();
7.找到對應的處理函式 car.carevent += new CarEvent(showMessage);
8.執行static void showMessage(string message)
優點:可以彈性定義程式執行的方式
優點範例:引用的類別一樣,但處理方式跟顯示結果可以不同(自訂)
可以彈性定義程式執行的方式!
▸ 繼承(Inheritance)
一個類別可以直接繼承現存類別的部份或者全部的成員資料和方法,
並可以增加額外的成員 資料或方法。
存取父類別成員:使用base關鍵字
練習1:
加入Vehicle及Car類別(Car繼承Vehicle),嘗試在主程式引用並呼叫。
加入類別
父類別:
子類別:
主程式:
練習2:
承上題,再加入Bus類別(繼承Vehicle),嘗試在主程式引用並呼叫。
練習3:承上題,加入修飾子private。
結果:無法繼承
練習4:承上題,加入修飾子protected。
結果:無法繼承
▸靜態(static)方法與變數
.何謂靜態方法與變數
不需要事先生成物件,就可以直接呼叫使用
呼叫方式 : 類別.方法(參數); 或 類別.變數;
例如:int.parse(),不用建立物件即可直接使用
.宣告方式 :加上 static 關鍵字
練習:
在Car類別建立Car方法及showName靜態方法
在主程式呼叫靜態方法:類別名稱+方法名稱