閱讀547 返回首頁    go 技術社區[雲棲]


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

  上一篇:go 各種語言版本的301轉向代碼的寫法
  下一篇:go 多核時代:並行程序設計探討(9)——數據分解模式Data Decomposition