程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 關鍵字params的用法 以及C# ref與out區別

C# 關鍵字params的用法 以及C# ref與out區別

編輯:C#入門知識

C# Params params params 關鍵字可以指定在參數數目可變處采用參數的方法參數。 在方法聲明中的 params 關鍵字之後不允許任何其他參數,並且在方法聲明中只允許一個 params 關鍵字。 示例: 字面意思比較難懂,所以看示例很有用。 [csharp]   // keywords_params.cs      using System;      class App   {       public static void UseParams(params object[] list)       {           for (int i = 0; i < list.Length; i++)           {               Console.WriteLine(list[i]);            }        }          static void Main()       {           // 一般做法是先構造一個對象數組,然後將此數組作為方法的參數           object[] arr = new object[3] { 100, 'a', "keywords" };           UseParams(arr);              // 而使用了params修飾方法參數後,我們可以直接使用一組對象作為參數           // 當然這組參數需要符合調用的方法對參數的要求           UseParams(100, 'a', "keywords");              Console.Read();        }    }     ref ref 關鍵字使參數按引用傳遞。其效果是,當控制權傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。 若要使用 ref 參數,則方法定義和調用方法都必須顯式使用 ref 關鍵字。 傳遞到 ref 參數的參數必須最先初始化。這與 out 不同,out 的參數在傳遞之前不需要顯式初始化。 屬性不是變量,因此不能作為 ref 參數傳遞。 盡管 ref 和 out 在運行時的處理方式不同,但它們在編譯時的處理方式是相同的。因此,如果一個方法采用 ref 參數,而另一個方法采用 out 參數,則無法重載這兩個方法。例如,從編譯的角度來看,以下代碼中的兩個方法是完全相同的。如果嘗試這麼做,將導致不能編譯該代碼。 如果一個方法采用 ref 或 out 參數,而另一個方法不采用這兩類參數,則可以進行重載。 示例: 按引用傳遞值類型是有用的,但是 ref 對於傳遞引用類型也是很有用的。這允許被調用的方法修改該引用所引用的對象,因為引用本身是按引用來傳遞的。 [csharp]   // keywords_ref.cs      using System;      class App   {       public static void UseRef(ref int i)       {           i += 100;           Console.WriteLine("i = {0}", i);        }          static void Main()       {           int i = 10;              // 查看調用方法之前的值           Console.WriteLine("Before the method calling: i = {0}", i);              UseRef(ref i);              // 查看調用方法之後的值           Console.WriteLine("After the method calling: i = {0}", i);           Console.Read();        }    }     C# ref與out區別 在C# 中,既可以通過值也可以通過引用傳遞參數。通過引用傳遞參數允許函數成員更改參數的值,並保持該更改。若要通過引用傳遞參數, 可使用ref或out關鍵字。ref和out這兩個關鍵字都能夠提供相似的功效,其作用也很像C中的指針變量。它們的區別是: 1、使用ref型參數時,傳入的參數必須先被初始化。對out而言,必須在方法中對其完成初始化。 2、使用ref和out時,在方法的參數和執行方法時,都要加Ref或Out關鍵字。以滿足匹配。 3、out適合用在需要retrun多個返回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。 注:在C#中,方法的參數傳遞有四種類型:傳值(by value),傳址(by reference),輸出參數(by output),數組參數(by array)。傳值參數無需額外的修飾符,傳址參數需要修飾符ref,輸出參數需要修飾符out,數組參數需要修飾符params。傳值參數在方法調用過程中如果改變了參數的值,那麼傳入方法的參數在方法調用完成以後並不因此而改變,而是保留原來傳入時的值。傳址參數恰恰相反,如果方法調用過程改變了參數的值,那麼傳入方法的參數在調用完成以後也隨之改變。實際上從名稱上我們可以清楚地看出兩者的含義--傳值參數傳遞的是調用參數的一份拷貝,而傳址參數傳遞的是調用參數的內存地址,該參數在方法內外指向的是同一個存儲位置。 方法參數上的 ref 方法參數關鍵字使方法引用傳遞到方法的同一個變量。當控制傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。 若要使用 ref 參數,必須將參數作為 ref 參數顯式傳遞到方法。ref 參數的值被傳遞到 ref 參數。 傳遞到 ref 參數的參數必須最先初始化。將此方法與 out 參數相比,後者的參數在傳遞到 out 參數之前不必顯式初始化。 屬性不是變量,不能作為 ref 參數傳遞。 如果兩種方法的聲明僅在它們對 ref 的使用方面不同,則將出現重載。但是,無法定義僅在 ref 和 out 方面不同的重載。 out 方法參數上的 out 方法參數關鍵字使方法引用傳遞到方法的同一個變量。當控制傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。 當希望方法返回多個值時,聲明 out 方法非常有用。使用 out 參數的方法仍然可以返回一個值。一個方法可以有一個以上的 out 參數。 若要使用 out 參數,必須將參數作為 out 參數顯式傳遞到方法。out 參數的值不會傳遞到 out 參數。 不必初始化作為 out 參數傳遞的變量。然而,必須在方法返回之前為 out 參數賦值。 屬性不是變量,不能作為 out 參數傳遞  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved