547
技術社區[雲棲]
C#中的參數傳遞
方法的參數傳遞機製:
1.值參數 (Value Parameter)
方法名稱 ( 參數類型 參數名稱[,參數類型 參數名稱] )
2.引用參數 (Reference Paramter)
方法名稱 ( ref 參數類型 參數名稱 [,ref 參數類型 參數名稱] )
3.輸出參數 (Out Paramter)
方法名稱 ( out 參數類型 參數名稱[,out 參數類型 參數名稱] )
輸出參數和引用參數的區別:
從CLR的角度看,關鍵字out和關鍵字ref是等效的,也就是說,無論使用哪個關鍵字,都會生成相同的元數據和IL代碼.但是C#編譯器將兩個關鍵字區別對待,在c#中,這兩個關鍵字的區別在於哪個方法負責初始化引用對象.
<1>若是使用的out關鍵字,那麼調用者不希望在調用方法之前初始化對象,被調用的方法不能讀取對象的值,而且被調用的方法必須在返回之前為對象賦值.
<2>若是使用的ref關鍵字,那麼調用者必須在調用方法之前首先初始化參數的值,被調用的方法可以讀取參數或為參數賦值.
例:
1.值參數、引用參數、輸出參數的方法調用:
using System;
class Methord
{
public static void ValueMethord(int i) //值參數的調用
{
i++;
}
public static void ReferenceMethord(ref int i) //引用參數的調用
{
i++;
}
public static void OutMethord(out int i) //輸出參數的調用
{
i=0; //注意:必須將局部變量i初始化
i++;
}
static void Main()
{
int i=0;
ValueMethord(i);
Console.WriteLine("i="+i);
int j=0; //注意:必須在此將局部變量j初始化,而不是在引用參數的調用時
ReferenceMethord(ref j);
Console.WriteLine("j="+j);
int k=0;
OutMethord(out k);
Console.WriteLine("k="+k);
}
}
2.向方法傳遞可變數量的參數:使用params關鍵字
using System;
class Methord
{
static int addi(params int[] valuse) //注意:params關鍵字後麵必須是接一個數組型變量
{
int sum=0;
foreach(int i in valuse) //遍曆數組中的每一個元素,然後求出其和的值
sum+=i;
return sum;
}
static void Main()
{
Console.WriteLine (addi(1,2,3));
}
}
3.對比值類型和引用類型:
值類型 引用類型
變量中存放的 真正的數據 指向數據的引用指針
內存空間分配 堆棧(Stack) 托管堆(Managed Heap)
內存需求 一般較小 較大
執行效能 較快 較慢
內存釋放時間點 執行超過定義變量的作用域 由回收站負責回收
可以為null 不可以為null 可以為null
最後更新:2017-04-02 04:00:24