一 何為方法
方法是一塊具有名稱的代碼,是類的函式成員,
方法主要分為方法頭和方法體,
void Method()
{
陳述句1;
陳述句2;
}
二 型別推斷和var關鍵字
var sum = 15;
var myClass = new MyClass();
var關鍵字是句法上的速記,表示任何可以從初始化陳述句右邊判斷出的型別,
三 方法呼叫
var myClass = new MyClass();
myClass.Show();

四 回傳值
方法可以向呼叫代碼回傳一個值,回傳的值被插入到呼叫代碼中發起呼叫的運算式所在的位置,
- 如果方法不回傳值,必須宣告為void
- 如果方法回傳值,則必須宣告一個回傳型別
宣告了回傳型別的方法,必須在其方法體中使用由return關鍵字構成的運算式來回傳一個值,
五 引數
5.1 形參
形參是本地變數,它宣告在方法的引數串列中,
引數串列中可以有任意數量的形參,用逗號隔開,
形參在整個方法體內使用,
5.2 實參
當代碼呼叫一個方法時,形參的值必須在方法的代碼開始執行之前被初始化
- 用于初始化形參的運算式或變數成為實參
- 實參位于方法呼叫的引數串列中
- 每一個實參必須與對應形參的型別相匹配,或是編譯器能實作隱式轉換
六 值引數
使用值引數,通過將實參的值復制給形參的方式把資料傳遞給方法,
方法被呼叫時,系統在堆疊中為形參分配空間,將實參的值復制給形參,
七 參考引數
使用參考引數,必須在方法的宣告和呼叫中使用ref修飾符,
void Method(ref int val)
{ ... }
使用參考引數,實參必須是變數,在用作實參前變數必須被賦值,如果是參考型別變數,可以賦值為一個參考或null,
對于值引數,系統在堆疊上為形參分配記憶體,而參考引數則不同,它有如下特征:
- 不會為形參在堆疊上分配記憶體;
- 形參的引數名將作為實參變數的別名,指向相同的記憶體地址,即在方法的執行程序中對形參的任何改變就如同對實參的改變,
八 參考型別作為值引數和參考引數
對于一個參考型別的物件,無論是將其作為值引數傳遞或參考引數傳遞,都可以在方法內部對該物件的成員進行操作,
- 將參考型別物件作為值引數傳遞時:如果在方法內部實體一個新物件并賦值給形參,將切斷形參和實參之間的關聯,并在方法呼叫結束后,新物件也將不復存在;
- 將參考型別物件作為參考引數傳遞時:如果在方法內部實體一個新物件并賦值給形參,在方法結束后該物件仍然存在,并且是實參所參考的值,
九 輸出引數
輸出引數用于從方法體內部把資料傳到呼叫代碼,使用out修飾符,
void Method(out int val)
{ ... }
與參考引數類似,輸出引數的形參擔當實參的別名,形參和實參都是同一塊記憶體位置的名稱,
在方法內部,輸出引數在被讀取之前必須被賦值,這意味著引數的初始值是無關的,且沒必要在方法呼叫前為實參賦值,
在方法回傳之前,方法內部貫穿的任何可能路徑都必須為所有輸出引數進行一次賦值,
十 引數陣列
void Method(params int[] arrayInt)
{ ... }
//呼叫方式1
Method(10,20,30);
//呼叫方式2
int[] arrayInt = {10,20,30};
Method(arrayInt);
- 在一個引數串列中只能有一個引數陣列;
- 如果有,它必須是串列中的最后一個;
十一 引數型別總結

十二 方法多載
一個類中可以有一個以上的方法擁有相同的名稱,這叫做方法多載 method overload,
使用相同方法的名稱必須有一個和其他方法不同的簽名,
方法的簽名有下列資訊組成:
- 方法的名稱;
- 引數的數量;
- 引數的資料型別和數量;
- 引數修飾符;
需要注意的是,回傳型別不是簽名的一部分!
十三 命名引數
class MyClass
{
public int Calc(int a, int b, int c)
{
return a + b + c;
}
static void Main()
{
var myClass = new MyClass();
var sum = myClass.Cals(c:2, a:4, b:3); //使用命名引數,可以顯示指定引數名字來賦值
}
}
十四 可選引數
使用可選引數,可以讓我們在呼叫方法的時候省略這個引數,
為了表明某個引數是可選的,需要在方法宣告時為引數提供默認值,
class MyClass
{
public int Calc(int a, int b = 3)
{
return a + b;
}
static void Main()
{
var myClass = new MyClass();
var sum1 = myClass.Cals(2);
var sum2 = myClass.Cals(2,10);
Console.WriteLine($"sum1:{sum1},sum2:{sum2}"); //輸出 sum1:5,sum2:12
}
}


十五 堆疊幀
區域變數(本地變數)和引數是位于堆疊上的,
在呼叫方法時,記憶體從堆疊的頂部開始分配,保存和方法相關聯的一些資料項,這塊記憶體叫做方法的堆疊幀 stack frame
堆疊幀包含:
- 回傳地址,也就是在方法退出時繼續執行的位置;
- 這些引數分配的記憶體,也就是方法的值引數,或引數陣列;
- 各種和方法呼叫相關的管理資料項;
在方法呼叫時,整個堆疊幀都會壓入堆疊,方法退出時,整個堆疊幀從堆疊上彈出,

十六 遞回
方法呼叫自身,叫做遞回,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/440503.html
標籤:C#
上一篇:C#-3 深入理解類
下一篇:C#-3 深入理解類
