【程式學習之路:Day13】C#程式設計:方法、例外處理、物件導向概念

莎莉 Sally
為自己的生涯成長
7 min readFeb 4, 2019

--

∎ 方法(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靜態方法

在主程式呼叫靜態方法:類別名稱+方法名稱

--

--