切換
舊版
前往
大廳
主題

資策會Unity課程「C#」Day4&5 Part1

冰劍士-冰雪飛 | 2014-10-22 21:31:52 | 巴幣 6 | 人氣 2279

此篇為10/20、22日兩天課程的內容心得

先撰寫「例外處理」和「類別方法」的部分,複雜度再度提升些

可能撰寫的不好,就請見諒了
=====================================================================
例外處理

使用者輸入一些阿拉伯數字所組成的字串時
有時候使用者可能會手賤去輸入超過型態範圍、非阿拉伯數字字串等各種錯誤
假如沒有錯例外處理時,程式就會死當造成無法挽回得局面

這種時候就要撰寫例外處理來避免執行上的錯誤
=====================================================================
try-catch-finally 例外處理

try
{
程式碼
}
catch(判定錯誤類別 變數名稱)
{
除錯程式碼
}
catch(判定錯誤類別1 變數名稱1)
{
除錯程式碼
}
finally
{
程式碼
}

try 的區段內填寫要檢查的程式碼
catch 括弧內填上內建的判定錯誤類別,並新令一個變數名稱

只要有 try 就一定要撰寫 catch 或 finally,finally 跟 catch基本上差不多
try 有執行的話就一定會執行 finally,不管有無例外

這裡給幾個個人已知的判定錯誤類別
OverflowException 超出型態範圍(ex:填寫 int 值超過 -2,147,483,648 ~ 2,147,483,647)
FormatException 格式錯誤(ex:填寫 int 值結果卻是 String)
ArgumentNullException NULL例外(ex:int 內值為NULL)

順帶一提,這些類別的繼承關係最大的為 Exception
這代表著判定類別填上此就甚麼例外的能處理
不過假如你要依不同例外來做不同處理的話可以使用多段 catch

在注意一點,類別關係越大的請寫在越下面,不然會無視較小的例外處理
=====================================================================
throw 敘述

throw new 判定錯誤類別(訊息);

當你程式遇到例外時,throw 會顯示出你所撰寫的訊息
並且在此敘述內 throw 後面的程式不會被執行
=====================================================================
checked 檢查溢位

checked
{
程式碼
}

C#程式執行時預設不會檢查溢位的錯誤
當補上 checked 敘述時,就會開起檢查溢位發生溢位就會停止執行
假如是使用 unchecked,就算發生溢位也會繼續執行
=====================================================================
靜態方法

最一開始,編譯器給我們的 Main 就是個最基礎的靜態方法

類別方法必須要在 class 類別內新增,下面是個簡單的範例

static 傳回值型態 方法名稱(參數型態 參數名稱 , 參數型態1 參數名稱1)
{
程式碼
}

括弧內的參數不一定要像範例中有兩個,而且參數型態不一定要相同
在 static 前可以補上 public 或 private,前者可以公開使用後者只能私用存取

如何呼叫自己寫好方法?下圖就是個簡單的範例

這張圖片我故意多擷取 class 的區段,是因為當我使用靜態方法時
假設我要呼叫不同類別的方法,必須是 非private 才可以使用,private 就一定要在同類別內使用

return 敘述

在前面的範例我們都是用 void 作為回傳值型態,這是因為 void 不必回傳任何的值
但假如我們使用其他的回傳值型態時,在程式區段的最後請補上 return 參數值


區域變數
這是個在方法內宣告的變數,所以也只能在方法內使用,當方法執行結束時就會消失

靜態變數
直接在類別內產生的變數,可供類別內的任何方法使用

稍微提一下,你設定的方法可以同名,但裡面的內容請不同,不然會造成程式誤判

基本上不推薦這樣做,畢竟維護、偵錯不易
=====================================================================
參數傳遞方式
關鍵字 傳遞方式 參數傳遞法
in 傳值法
ref in 或 out 傳址法
out out out參數

簡單的範例做為區別

註:Program 是預設的類別

x 變數只傳進去,卻沒有回傳 x++ 的值
y 變數傳進去並回傳 y++ 的值
z 變數沒傳進去只傳預設好的 5
這樣就是個簡單的傳遞概念,通常我們使用傳值法就夠了,而使用方法的傳回值傳回一個結果
但當我們想要傳回一個以上的結果時就會用到 ref 或 out

params 可變動參數

稍微用到陣列的概念,在設定傳入參數前補上 params 就可以變動輸入參數的數量
=====================================================================
不清楚對於遊戲製作來講,這些例外處理的使用情況會否常用
但學起來還是可以做為一些細部上的檢查,以免出現Bug

至於類別方法的寫法非常重要,對於物件導向的程式來說是個常用的手法
一方面可以把程式乾淨化,也可節省很多空間

創作回應

更多創作