前言
上一篇我們簡單介紹控制流程,而在這一章節我們將簡單介紹方法。在程式開發過程中,我們能執行一個子程式區塊,完成一個動作,我們簡單稱之方法(method)。方法能有效提升程式可用性與可讀性:將常用的程式區塊抽出,避免相同的程式重複出現;好的命名可以讓工程師快速了解這個子程式區塊的目的,提升開發效能。本篇文章若有錯誤或任何建議,請各位先進不吝指教。關鍵字:方法、多載、選擇性參數、擴增方法、ret 與 out
介紹
方法的命名方式為動詞,用來描述一個動作或行為,下面為一些常見的命名範例:GetWalletById
CreateOrUpdatePlayer
IsPlayerTokenExpired
下面為方法的主體:(存取修飾詞我們會在類別這章節介紹)
下面是一個簡單的方法範例:
static void Main(string[] args)
{
int amount = 1000;
SaveMoney(1000);
}
private static void SaveMoney (int amount)
{
// do something
}
當然,我們也能在物件內宣告方法,在初始化物件後即可使用:
public class Student
{
public List<int> Score { get; set; }
public int GetHighScore()
{
int highScore = 0;
foreach (var item in Score)
{
highScore = Math.Max(item, highScore);
}
return highScore;
}
}
static void Main(string[] args)
{
Student student = new Student();
student.Score = new List<int>();
student.Score.Add(20);
student.Score.Add(30);
Console.WriteLine(student.GetHighScore());
}
多載
方法的識別方式為 方法名稱 與 傳入參數,意思指您只要您傳入參數不同,您可以擁有數個相同名稱的方法,我們稱之為多載。如下列程式所示,只要您的方法名稱與傳入參數組合不一致,您就可以有相同名稱的方法:public int StratSomething()
{
return 0;
}
public int StratSomething(string name)
{
return 0;
}
public int StratSomething(int age)
{
return 0;
}
選擇性參數
我們可以給傳入參數預設值:當我們沒有傳入參數為 null 時,方法將自動採用選擇性參數。如下列程式所示:static void Main(string[] args)
{
GetSomething("duran");
}
public static void GetSomething(string firstName, string lastName = "hsieh")
{
Console.WriteLine("Name:" + firstName + " " + lastName);
}
擴展方法
我們自行能為 .NET 與第三方套件增加客製方法,提供開發期間工程師使用。擴展方法相當酷,使用方法如下:public static class StringExtendsion
{
public static string AddSymbolAtEnd(this string s)
{
return s + "!!";
}
}
建立完成後,你在Visual Studio 自動完成清單中可以看見自己的擴展方法:我們嘗試使用自己的擴增方法:
static void Main(string[] args)
{
string stringExtendExample = "Hello World";
Console.WriteLine(stringExtendExample.AddSymbolAtEnd());
}
ref and out
ref 與 out 為參數修飾詞,透過 out / ref 參數,你能直接取用並進行運算,不同的地方在於:透過 ref 你能雙向傳入/傳出參數,方法內部不需要指派這個參數,而 out 在方法內部必須先指派。下列是 out 的範例:
class OutExample
{
static void FillArray(out int[] array)
{
array = new int[3] { 3, 2, 1 };
}
static void Main()
{
int[] demoArray;
FillArray(out demoArray);
for (int i = 0; i < demoArray.Length; i++)
{
System.Console.Write(demoArray[i] + ", ");
}
}
}
3, 2, 1,下列是 ref 的範例:
class TestRef
{
static void FillArray(ref int[] array)
{
if ( array == null )
{
array = new int[10];
}
array[0] = 1;
array[2] = 3;
}
static void Main()
{
int[] demoArray = { 3, 2, 1};
FillArray(ref demoArray);
for (int i = 0; i < demoArray.Length; i++)
{
System.Console.Write(demoArray[i] + ", ");
}
}
}
1, 2, 3,
上一篇:[C#][Visual Studio] 控制流程 Control Flow
下一篇:[C#][Visual Studio] 陣列、集合與列舉 (Array, Collection, and Enum)
參考資料
1. Study4TW 內部教材2. ?: 運算子 (C# 參考) - Microsoft docs
3. ?? 運算子 (C# 參考) - Microsoft docs








2 留言
謝謝版主大大優質又詳細的介紹~!
回覆刪除小筆誤: 最後一行文字應為 下列是"ref"的範例 (?
感謝協助校稿,我太不細心了 :)
刪除