前言
上一篇我們簡單介紹控制流程,而在這一章節我們將簡單介紹方法。在程式開發過程中,我們能執行一個子程式區塊,完成一個動作,我們簡單稱之方法(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"的範例 (?
感謝協助校稿,我太不細心了 :)
刪除