在 C# 中,除了可以原本的Method,你也可以定義自己的Method

Method具有以下優點: - 可重複使用。 - 易於測試。 - 對方法的修改不影響調用程序。 - 一種方法可以接受許多不同的輸入。

Main

每一個的C#程式,都至少要保留一個Main Method C#的程式在執行時,也會從Main開始編譯 例如,Visual Studio編譯C#,預設的格式如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

自定義 Methods

在C#自定義Method,如果在方法中有return結果, 基本格式如下:

/*
型別 Method名稱(型別 參數,型別 參數,...) {
	表達式;
  return 結果;
}*/
int MyMethod(int a){
  return a++;
}

void

在C#自定義Method,如果沒有return任何結果,則必須使用 void 類型

/*
static void Method名稱()
{
  表達式;
}*/
static void Hello(){
  Console.WriteLine("Hello World");
}

呼叫Methods

在C#呼叫自定義的Methods,只要用: Method名稱(型別 參數,型別 參數,…) 並且,不限呼叫次數。 例如:

static void Main(string[] args)
{
		//呼叫自定義的Methods
    Caculate(33, 3);
    Caculate(34, 10);
    Caculate(35, 7);
}

static void Caculate(int a, int b)
{
    Console.WriteLine(a+b);
}

如果 Method 要呼叫自己,則用同樣的方式即可 例如:

static int ShowThis(int x) {
  if (x == 1) {
    return 1;
  }
  return x*ShowThis(x-1);
}

透過冒號指定參數傳遞對象

C#可以透過參數名稱+冒號+值來指定值要傳遞給誰

參數名稱:值

static void Main(string[] args)
{
    //指定  b:2  a:4
    Caculate(b:2, a:4);
}

static void Caculate(int a, int b)
{
    Console.WriteLine(a/b); //回傳結果  2
}

Reference

C# 提供了 reference,在建立方法時, 假設,先定義了變數,並且準備將變數帶入 Method 只要在呼叫Methods參數及被呼叫的Methods參數加上 ref ref就會將變數的記憶體位置帶到Methods中

ref在傳遞之前要先初始化變數,需賦予值

static void Main(string[] args)
{
    int x = 10;
    //以ref 的格式來傳輸 x
    Caculate(ref x);
    Console.WriteLine(x);//結果: 30
}

static void Caculate(ref int a)
{
    a = a * 3;
}

Output

Output 參數的使用方式類似於 reference 只要在呼叫Methods參數及被呼叫的Methods參數加上 out

因此,out和ref差別在於: ref在傳遞之前要先初始化變數,Output則不需要初始化(不必賦予值)

static void Main(string[] args)
{
    int x;
    Caculate(out x);
    Console.WriteLine(x);
}

static void Caculate(out int a)
{
    //a在剛傳遞過來時,未賦予值
    //所以,如果寫成  a=a*3; 就會發生錯誤
    a = 33;
}

Overloading 多載

在C#中,允許Methods用 Overloading的方式來建立Methods 也就是,可以用 同樣Method名稱配不同參數型別 , 對系統而言,同時存在這樣的寫法,不會造成衝突

範例:

static void Main(string[] args)
{
    CallMe(098765);//int
    CallMe("Adam");//string
    CallMe("Male",180);//string, int
}

static void CallMe(int x)
{
    Console.WriteLine("Phone Number is:" + x);
}

static void CallMe(string x)
{
    Console.WriteLine("Your name is :" + x);
}

static void CallMe(string x, int y)
{
    Console.WriteLine("Sexual: " + x+", Height:"+y+" cm");
}