C#入門-Day7:函數

更新於 發佈於 閱讀時間約 14 分鐘

函數的基本結構

在 C# 中,函數(方法)的定義由以下部分組成:訪問修飾符、返回類型、方法名稱、參數列表和方法體。以下是函數定義的基本結構和一些示例:

基本結構

[訪問修飾符] [返回類型] [方法名稱]([參數列表])
{
// 方法體
}

訪問修飾符

訪問修飾符指定方法的可見性或訪問級別。常見的訪問修飾符有:

  • public:方法對所有人可見。
  • private:方法僅對包含它的類可見。
  • protected:方法對包含它的類及其派生類可見。
  • internal:方法僅對同一程序集內的代碼可見。
  • protected internal:方法對同一程序集內的代碼和任何派生類可見。
  • private protected:方法僅對包含它的類及同一程序集內的派生類可見。

函數的呼叫

在 C# 中,函數(方法)的呼叫可以根據具體需求和上下文通過多種方式進行。以下是一些常見的方法呼叫方式:

直接呼叫

  • 在同一類中呼叫:在同一類內部,直接使用方法名稱來呼叫方法。
    class MyClass
    {
    void PrintHello()
    {
    Console.WriteLine("Hello, world!");
    }

    void CallMethod()
    {
    PrintHello(); // 直接呼叫
    }
    }

  • 在另一個類中呼叫:使用類的實例來呼叫方法。
    class MyClass
    {
    public void PrintHello()
    {
    Console.WriteLine("Hello, world!");
    }
    }

    class Program
    {
    static void Main(string[] args)
    {
    MyClass myClass = new MyClass();
    myClass.PrintHello(); // 使用實例呼叫
    }
    }

靜態方法呼叫

  • 在同一類中呼叫:在同一類內部,直接使用方法名稱來呼叫靜態方法。
    class MyClass
    {
    static void PrintHello()
    {
    Console.WriteLine("Hello, world!");
    }

    static void CallMethod()
    {
    PrintHello(); // 直接呼叫靜態方法
    }
    }

  • 在另一個類中呼叫:使用類名來呼叫靜態方法。
    class MyClass
    {
    public static void PrintHello()
    {
    Console.WriteLine("Hello, world!");
    }
    }

    class Program
    {
    static void Main(string[] args)
    {
    MyClass.PrintHello(); // 使用類名呼叫靜態方法
    }
    }

使用參數呼叫

呼叫方法時,傳遞參數以匹配方法定義。

class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}

class Program
{
static void Main(string[] args)
{
Calculator calculator = new Calculator();
int result = calculator.Add(3, 4); // 使用參數呼叫
Console.WriteLine(result); // Output: 7
}
}

使用 ref 和 out 參數呼叫

使用 refout 關鍵字來傳遞參數。

class Modifier
{
public void DoubleValue(ref int number)
{
number *= 2;
}

public void InitializeOut(out int number)
{
number = 10;
}
}

class Program
{
static void Main(string[] args)
{
Modifier modifier = new Modifier();

int a = 5;
modifier.DoubleValue(ref a); // 使用 ref 參數呼叫
Console.WriteLine(a); // Output: 10

int b;
modifier.InitializeOut(out b); // 使用 out 參數呼叫
Console.WriteLine(b); // Output: 10
}
}

使用可選參數和具名參數呼叫

呼叫方法時,可以省略可選參數或指定參數名稱。

class Greeter
{
public void Greet(string name, string greeting = "Hello")
{
Console.WriteLine($"{greeting}, {name}!");
}
}

class Program
{
static void Main(string[] args)
{
Greeter greeter = new Greeter();
greeter.Greet("Alice"); // 使用可選參數呼叫
greeter.Greet(name: "Bob", greeting: "Hi"); // 使用具名參數呼叫
}
}

使用異步方法呼叫

呼叫異步方法,使用 await 關鍵字。

class AsyncExample
{
public async Task<int> GetNumberAsync()
{
await Task.Delay(1000);
return 42;
}
}

class Program
{
static async Task Main(string[] args)
{
AsyncExample example = new AsyncExample();
int result = await example.GetNumberAsync(); // 使用 await 呼叫異步方法
Console.WriteLine(result); // Output: 42
}
}

委派和事件

使用委派和事件來呼叫方法。

class Program
{
public delegate void PrintDelegate(string message);

public static void PrintMessage(string message)
{
Console.WriteLine(message);
}

static void Main(string[] args)
{
PrintDelegate del = PrintMessage; // 使用委派呼叫
del("Hello, delegate!");

// 使用匿名方法或 Lambda 表達式
PrintDelegate del2 = (msg) => Console.WriteLine(msg);
del2("Hello, Lambda!");
}
}

這些是 C# 中方法呼叫的主要方式。每種方式都可以根據具體情況選擇使用,以達到最佳效果。

函數的參數

向函數傳遞參數

值傳遞(Pass by Value)

預設的傳遞方式,函數接收參數的副本,修改不會影響原始變數。

void ModifyValue(int x)
{
x = 10;
}

int a = 5;
ModifyValue(a);
Console.WriteLine(a); // Output: 5

引用傳遞(Pass by Reference)

使用 ref 關鍵字,函數接收變數的引用,修改會影響原始變數。

void ModifyRef(ref int x)
{
x = 10;
}

int a = 5;
ModifyRef(ref a);
Console.WriteLine(a); // Output: 10

輸出參數(Out Parameter)

使用 out 關鍵字,參數不需要初始化,函數內必須賦值。

void InitializeOut(out int x)
{
x = 10;
}

int a;
InitializeOut(out a);
Console.WriteLine(a); // Output: 10

參數陣列(Parameter Array)

使用 params 關鍵字,可以傳遞可變數量的參數。

void PrintParams(params int[] numbers)
{
foreach (var number in numbers)
{
Console.WriteLine(number);
}
}

PrintParams(1, 2, 3, 4); // Output: 1 2 3 4

具名參數(Named Parameters)

調用函數時指定參數名稱,可以不按順序傳遞。

void PrintDetails(string name, int age)
{
Console.WriteLine($"Name: {name}, Age: {age}");
}

PrintDetails(age: 30, name: "John"); // Output: Name: John, Age: 30

可選參數(Optional Parameters)

在函數定義時給參數提供預設值,調用時可以省略。

void Greet(string name, string greeting = "Hello")
{
Console.WriteLine($"{greeting}, {name}!");
}

Greet("Alice"); // Output: Hello, Alice!
Greet("Bob", "Good morning"); // Output: Good morning, Bob!

函數的返回值

在 C# 中,函數的返回值有多種形式和變化,根據需求的不同,可以選擇適合的返回值類型。以下是一些常見的返回值類型及其變化形式:

基本類型(Primitive Types)

函數可以返回基本數據類型,如 int, float, double, bool, char, string 等。

int Add(int a, int b)
{
return a + b;
}

複合類型(Complex Types)

函數可以返回類、結構或其他複合數據類型。

class Person
{
public string Name { get; set; }
public int Age { get; set; }
}

Person GetPerson()
{
return new Person { Name = "Alice", Age = 30 };
}

集合類型(Collections)

函數可以返回集合類型,如陣列(Array)、列表(List<T>)、字典(Dictionary<TKey, TValue>)等。

List<int> GetNumbers()
{
return new List<int> { 1, 2, 3, 4, 5 };
}

Nullable 類型(Nullable Types)

函數可以返回可空類型(Nullable<T>),特別是當需要表示數值類型的可空性時。

int? GetNullableInt()
{
return null; // Or return some integer value
}

元組(Tuples)

函數可以返回元組,以返回多個值而不需要定義新的類或結構。

(int, string) GetTuple()
{
return (1, "Hello");
}

var result = GetTuple();
Console.WriteLine(result.Item1); // Output: 1
Console.WriteLine(result.Item2); // Output: Hello

異常(Exceptions)

通過拋出異常來表示函數的錯誤狀態,這不是傳統意義上的返回值,但也是函數行為的一部分。

void DoSomething()
{
throw new InvalidOperationException("An error occurred");
}

Task 和 Task<TResult>(異步方法)

當函數是異步方法時,可以返回 TaskTask<TResult> 來表示異步操作。

async Task<int> GetNumberAsync()
{
await Task.Delay(1000);
return 42;
}

Void

函數不返回任何值時使用 void

void PrintMessage(string message)
{
Console.WriteLine(message);
}

這些變化使 C# 的函數返回值能夠靈活應對不同的需求,從簡單的數值返回到複雜的異步操作,都可以通過合適的返回值類型來實現。

avatar-img
15會員
111內容數
日後將分享關於我的經驗(日常、工作、技術),並期待未來能創造屬於我的宇宙。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Michael楊 的其他內容
本文是C#入門教程的一部分,涵蓋了流程控制的各種語句與迴圈。這包括if、else if和else語句,三元運算子,switch語句,以及for、foreach和while迴圈。文中還介紹了如何在迴圈中使用break、continue、return和goto語句。
C#中的運算符包括算術運算子(如加法、減法、乘法等)、比較運算子(如等於、不等於、大於等)、賦值運算子(如賦值、加並賦值等)、邏輯運算子(如與、或、非等)和位元運算子(如按位與、按位或等)。這些運算符有不同的優先等級,例如括號的優先等級最高,其次是次方、乘、除、餘數等。
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
在學習C#之前,必須先建立開發環境,例如安裝Visual Studio或其他IDE,並且建立第一個C#專案。可以在Visual Studio中或使用dotnet CLI來建立各種類型的專案。
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
C#是一種開源、跨平台、面向對象的編程語言,具有類型安全、泛型、模式匹配等特性。廣泛應用於桌面和Web應用程序、遊戲開發、移動應用、雲計算等領域。全球數十萬家公司像微軟、Unity Technologies、Stack Overflow等使用C#支持其業務。C#還提供豐富的進階學習資源和主題。
本文是C#入門教程的一部分,涵蓋了流程控制的各種語句與迴圈。這包括if、else if和else語句,三元運算子,switch語句,以及for、foreach和while迴圈。文中還介紹了如何在迴圈中使用break、continue、return和goto語句。
C#中的運算符包括算術運算子(如加法、減法、乘法等)、比較運算子(如等於、不等於、大於等)、賦值運算子(如賦值、加並賦值等)、邏輯運算子(如與、或、非等)和位元運算子(如按位與、按位或等)。這些運算符有不同的優先等級,例如括號的優先等級最高,其次是次方、乘、除、餘數等。
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
在學習C#之前,必須先建立開發環境,例如安裝Visual Studio或其他IDE,並且建立第一個C#專案。可以在Visual Studio中或使用dotnet CLI來建立各種類型的專案。
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
C#是一種開源、跨平台、面向對象的編程語言,具有類型安全、泛型、模式匹配等特性。廣泛應用於桌面和Web應用程序、遊戲開發、移動應用、雲計算等領域。全球數十萬家公司像微軟、Unity Technologies、Stack Overflow等使用C#支持其業務。C#還提供豐富的進階學習資源和主題。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
2.0 上古漢語的特殊結構 2.3 之乎者也 —  也 (矣﹑焉) 2.3.1 也 一﹕初探之四 現在讓我們從函數引申出來的函子/論元觀點來解析上述「也」字的用法。用初級計算機科學編程的語言來說,函子就是一個具有函數功能的物件 (object),方便我們使用﹔它的功能就是讓我們可以召喚
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
主要來講宣告函式跟箭頭函式 : 宣告函式(Function Declaration) 語法: function functionName(parameters) { return result; } 特點: 使用 function 關鍵字 函式名稱是必需的 存在函式
Thumbnail
C 語言的函式庫定義了許多好用的函式,在寫 C++ 的時候可以拿來用。這是因為 C++ 當初在設計的時候,就有刻意把 C 涵蓋進來。 基本用法 首先要導入 C 語言的標準函式庫: #include <cstdlib> 以 c 作為開頭表示它是 C 語言的函式庫,只是被我們拿來 C++ 的程式
※ 函式進階介紹: 箭頭函式: 箭頭函式相比於一般函式,語法相當簡潔。除了少去 function 關鍵字,如果只有一個參數,箭頭函式可以省略括號;只有一行程式碼,就是直接簡單返回一個變數或簡單的表達式,可以省略大括號和 return。例子如下: //一般函式計算平方用的寫法 const squ
※ 函式基礎介紹: ※ JavaScript 特殊的函式特性: 函式可以當成值來傳遞 (可以放進變數或放進物件) 函式可以當成函式的參數 callback - 在特定事件中觸發函式 (非同步特性) ※ 函式的基本寫法: ※ 調用 (invoke) 函式: "調用" 意指呼叫或執行
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
對於程序式編程來說,程式是由一系列的指令組成,例如計算數值、印出訊息、修改變數、呼叫子程序、配置變數的記憶體空間等。定義函式是為了讓一些程序可以重複利用,因此稱為子程序,其中參數為子程序中特別的變數,讓我們能夠透過它們控制子程序的行為。函式的回傳值只是一種方便將結果帶回來的方法,但一般只能回傳一個值
Thumbnail
本文將介紹自定函式及應用,利用程式範例解釋為什麼要用到自定函式 自定函式好處當然就是,讓你的程式碼看起來比較簡潔,在重複使用到的程式碼區塊,可以包裝成函式,讓你重複使用它。
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
2.0 上古漢語的特殊結構 2.3 之乎者也 —  也 (矣﹑焉) 2.3.1 也 一﹕初探之四 現在讓我們從函數引申出來的函子/論元觀點來解析上述「也」字的用法。用初級計算機科學編程的語言來說,函子就是一個具有函數功能的物件 (object),方便我們使用﹔它的功能就是讓我們可以召喚
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
主要來講宣告函式跟箭頭函式 : 宣告函式(Function Declaration) 語法: function functionName(parameters) { return result; } 特點: 使用 function 關鍵字 函式名稱是必需的 存在函式
Thumbnail
C 語言的函式庫定義了許多好用的函式,在寫 C++ 的時候可以拿來用。這是因為 C++ 當初在設計的時候,就有刻意把 C 涵蓋進來。 基本用法 首先要導入 C 語言的標準函式庫: #include <cstdlib> 以 c 作為開頭表示它是 C 語言的函式庫,只是被我們拿來 C++ 的程式
※ 函式進階介紹: 箭頭函式: 箭頭函式相比於一般函式,語法相當簡潔。除了少去 function 關鍵字,如果只有一個參數,箭頭函式可以省略括號;只有一行程式碼,就是直接簡單返回一個變數或簡單的表達式,可以省略大括號和 return。例子如下: //一般函式計算平方用的寫法 const squ
※ 函式基礎介紹: ※ JavaScript 特殊的函式特性: 函式可以當成值來傳遞 (可以放進變數或放進物件) 函式可以當成函式的參數 callback - 在特定事件中觸發函式 (非同步特性) ※ 函式的基本寫法: ※ 調用 (invoke) 函式: "調用" 意指呼叫或執行
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
對於程序式編程來說,程式是由一系列的指令組成,例如計算數值、印出訊息、修改變數、呼叫子程序、配置變數的記憶體空間等。定義函式是為了讓一些程序可以重複利用,因此稱為子程序,其中參數為子程序中特別的變數,讓我們能夠透過它們控制子程序的行為。函式的回傳值只是一種方便將結果帶回來的方法,但一般只能回傳一個值
Thumbnail
本文將介紹自定函式及應用,利用程式範例解釋為什麼要用到自定函式 自定函式好處當然就是,讓你的程式碼看起來比較簡潔,在重複使用到的程式碼區塊,可以包裝成函式,讓你重複使用它。
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護