This article is currently in the process of being translated into Chinese (~89% done).
Methods (functions)
在類別中,屬性和欄位可被視作是被動的角色,而方法則是主動的角色,因為方法能執行一個或多個動作並可選擇回傳一個結果。在其他的程式語言中,方法有時也被稱作是「函數」或 funcs;但在 C#,當它們屬於一個類別時,它們便會被稱作是方法。而方法之所以有益,是因為它們讓你得以將一部份的功能封裝進一個方法中,如此一來你便能在多個不同的地方再次呼叫它。
方法的定義方式如下:
<visibility> <return type> <name>(<parameters>)
{
<method code>
}
這裡有一個非常基本的例子:
public int AddNumbers(int number1, int number2)
{
return number1 + number2;
}
這一個非常基本的方法會將兩個數字相加並將結果返回,接下來就讓我們一步步瞭解它的各個部分:
- public 是這個方法的可見性(在之後的教程中會再詳細介紹)
- int 是回傳值的資料型態。如果你不希望你的方法回傳任何東西,請使用 void 關鍵字來替代。
- AddNumbers 是這個方法的名稱。
- (int number1, int number2) - 是這個方法的參數(詳情請見本教程的後續章節)。參數之於方法是可以選擇的,所以你也可以選擇不在括號中輸入任何東西,但括號本身是必要的。
- 你可以在方法內部(大括號之間)看到這個方法的實際程式碼。程式碼的長度可以是一行也可以是多行。
要呼叫一個方法,我們只需要輸入它的名字並在後方加上括號;在括號之中,則需要輸入參數(如果該方法接受任何參數的話),就像這樣:
AddNumbers(3, 39);
由於方法是在類別中被定義的,你可能會想要在當下所在的類別中呼叫另一個類別中的方法;在這樣的情況下,你需要在方法呼叫的前面加上物件的名稱;若是要呼叫靜態方法(在之後的教程會再詳細介紹),則需要在方法呼叫前加上類別的名稱。在下方程式碼中,我們示範了如何呼叫被放在名為 MathHelper 類別中的 AddNumbers() 方法:
public void DoMath()
{
MathHelper mathHelper = new MathHelper();
int result = mathHelper.AddNumbers(4, 38);
Console.WriteLine(result);
}
Method return types
現在讓我們再多聊聊回傳類型。在先前的範例中,我們定義了一個回傳類型為 int 的方法,但你也可以回傳任何其他的 C# 資料型態;事實上,你甚至可以宣告一個不回傳任何內容的方法,就像我們在 DoMath() 方法中所看到的那樣,你會注意到我以 void 關鍵字替換掉了 int,這表示這個方法不應該回傳任何內容。在某些程式語言中,沒有回傳類型的方法會被稱為程序(procedures),但在 C# 中,它們依然是稱作方法(methods)。
必須注意到的是,如果你有為方法宣告回傳型態,你就必須要有回傳內容——不然,編譯器便會馬上開始抱怨:
public int AddNumbers(int number1, int number2)
{
Console.WriteLine(number1 + number2);
}
Compiler error: AddNumbers(int, int)': not all code paths return a value
這表示當你有為你的方法宣告回傳型態時,你的方法中就必須要有一個(或多個)return 關鍵字。在有多個可能的程式碼路徑時,你便可能會需要有多個 return 關鍵字,請見下方程式碼:
public int AddLargeNumbers(int number1, int number2)
{
if((number1 > 1000) && (number2 > 1000))
{
return number1 + number2;
}
return 0;
}
在這種情況下,我們便會需要第二個 return 語句,如果將它省略掉了,編譯器便會為此抱怨,因為我們的條件語句可能會阻止第一個 return 語句被命中。
Summary
方法讓你可以封裝功能並在不同的地方重複使用那些功能。透過向方法提供不同的參數,你也可以得到不同的結果。雖然我們已有在上方的示例中使用了一些參數,但在下個章節,我們將會再更深入地探討方法中的參數。