程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 黑馬程序員_淺談out參數、ref參數和可變參數,淺談ref

黑馬程序員_淺談out參數、ref參數和可變參數,淺談ref

編輯:C#入門知識

黑馬程序員_淺談out參數、ref參數和可變參數,淺談ref


1、out參數

        out關鍵字會導致參數通過引用來傳遞,通俗點說,就是往外傳值的。

     out參數的作用:用於以內部變量為外部變量賦值的,out一般適用於某個方法不只是使用return返回單個值,而是需要有多個返回值的情況。

     out參數的使用需要注意以下幾點:

    1)out參數傳遞的變量在傳遞之前不需要對其進行初始化。

        分析:在調用方法之前,對out參數傳遞的變量只需聲明,可以賦值也可以不賦值,不過反正都是要在調用時被覆蓋掉,所以大可不必賦值,因為賦值了雖然不會報錯,但卻根本也沒有用處,沒必要多此一舉!(詳見以下代碼)

    2)如果方法的參數有使用out關鍵字修飾時,在調用該方法時,記住也要在out參數傳遞的變量前面加上out才行。

        分析:加上out能表明這個參數不是傳入的,而是傳出值的,但是out修飾的參數依然可以傳入值;不加out關鍵字,會使得該 參數成為無效參數而報錯。

    3)方法使用了out參數傳遞變量時,就是要返回值,所以必須在方法返回值或方法結束之前,對out所修飾的變量進行賦值。

 1         static void Main(string[] args)
 2         {
 3             int rst;   //out修飾的變量在調用之前只需聲明即可
 4             int num=8;
 5             if (isMod(num, out rst))   //記住加上out修飾變量
 6             {
 7                 Console.WriteLine("{0}是偶數,{0}/2={1}", num, rst);
 8             }
 9             else
10             {
11                 Console.WriteLine("{0}不是偶數",num);
12             }
13             Console.ReadKey();
14         }
15
16         public static bool isMod(int number,out int result)//通過參數返回值
17         {
18             if (number % 2 == 0)
19             {
20                 result = number / 2;  //方法結束之前必須對result賦值
21                 return true;
22             }
23             else
24             {
25                 result = 0;  //方法結束之前必須對result賦值
26                 return false;
27             }
28         }

           在上述代碼中,out 修飾了rst 和result 兩個變量,就相當於在它們之間建立了一種聯系,對result 進行賦值也就是對rst進行賦值,等於把方法中的局部變量的值返出去了,成功達到了通過參數返值的目的。

      4)另外,若是要在方法內部使用out 修飾的變量,如上述程序,在isMod 方法中使用result 之前,必須先對其進行賦值才能使 用。雖然可能在isMod 方法被調用之前,已經對rst 賦值,比如 rst=2,當參數rst 以out 形式傳入時,result 雖然也能收到rst 傳來的值,即調用時result 也等於2,然而,在isMod 方法裡想要使用result 變量時,還是必須先要對它賦一次值,這就顯得調用之前的賦值變得毫無意義。

2、Ref參數

       ref 關鍵字,同out一樣,可以使得參數通過引用來傳遞。換句話說,ref能夠讓你直接對原來那個數進行操作,而不是將原數復制一份,對那個復制項進行操作。

       ref參數的作用:與out不同的是,它可以雙向傳值,主要適用於場景內部對外部的值進行改變的情況。

       ref參數的使用需要注意以下幾點:

      1)ref參數傳遞的變量在傳遞之前一定要對其進行初始化賦值。

          分析:ref本來就適用於場景內部對外部的值進行改變的情況,所以在傳參之前,一定要對其賦初值,才能有值傳過去。

      2)如果方法的參數有使用ref關鍵字修飾時,在調用該方法時,記住也要在ref參數傳遞的變量前面加上ref才行。

          分析:加上ref能表明這個參數既是傳入的,又可以是傳出值的,不加ref關鍵字,會使得該參數成為無效參數而報錯,num和number兩個變量都使用了ref來修飾,使得number指向了num,所以在Test方法中對number進行操作時,就是對num進行操作。(詳見以下代碼)

 1        static void Main(string[] args)
 2         {
 3             int num = 100;  //ref修飾的變量,必須對其賦初值
 4             Test(ref num);  //記住加上ref變量
 5             Console.WriteLine(num);
 6             Console.ReadKey();
 7         }
 8 
 9         public static void Test(ref int number)
10         {
11             int numA = number;
12             number = 2; //不一定要賦值
13         }

    3)方法使用了ref參數傳遞變量時,不同於out,沒有要求一定在方法返回值或方法結束之前,對ref所修飾的變量進行賦值,所以可以不賦值。

    4)另外,若是要在方法內部使用ref修飾的變量,如上述程序,在Test方法中使用number之前,因為要求已經對即將傳入的num,賦了初值100,不同於out,此時可以在Test方法內直接使用number變量,並且,當參數num以ref形式傳入時,number就能收到num傳來的值,即調用時number也等於100,之後改變number的值,也同時改變了num的值。

3、可變參數

     params 是關鍵字,可以使得在參數個數可變處采用參數的數組型參數,比如 int sum(params int[] values)。

    可變參數的作用:使得個數不確定的可變參數以數組的形式傳遞,適合於方法的參數個數未知的情況時,用於傳遞大量的數組集合參數。

    可變參數在使用時需注意:

     1)不允許將params修飾符與refout修飾符組合起來使用。

     2)當方法的參數列表中有多個參數時,params修飾的參數必須放在最後,不能放在前面,以免程序不好確定參數究竟有多少個而報錯。比如: int sum(string name,params int[] values)

     3) 一個方法當然可以包含可變參數和不變參數,兩個可以同時使用。

    這樣,有了可變參數,就可以在某些情況下根據特定的需要來確定方法的參數個數。

    小結:

    這是我的第一篇學習日記,知識點可能講的不是很細,但其中的每一點都是我自己歸納出來的,以前只學過點C++基 礎,沒接觸過C#,更不知道有Out參數、Ref參數和可變參數這三個概念,通過學習黑馬基礎入門視頻的C#編程基礎部分,以及查閱相關資料,對這三個知識點已經能夠基本掌握,還記得當初跳著看視頻,不能理解調用int.TryParse方法時,為什麼要在參數前加上out,out又有什麼作用,現在已經能清楚地運用它們了。即使這是些很簡單的內容,但是卻是很重要的基礎,我需要把它記錄下來,以便於提醒自己。現在發現,寫學習筆記不僅可以提高自己的表達能力,還有助於學習。

    我告訴自己,需要堅持下去!

詳細請查看:www.itheima.com


c# 參數傳遞方式?

引用參數以ref為關鍵字,這種參數是要在調用之前就初始化的。這參數一般情況下是從外部向內部傳遞數值的時候使用,對於托管代碼加ref和不加基本相同,但是對於托管代碼就有所區別。

輸出參數以out為關鍵字,這種參數不需要輸入確定的值,實際的對象是在方法內部初始化,由方法內部給這種參數賦值。一般是調用該方法之後,需要方法輸出一些數據的時候使用。因為有時候方法的返回值可能用作他用,而這時還想讓方法輸出其他的數據,就可以使用out參數了。
 

vb 對於參數的問題

這個概念用在程序員自己編寫子程序中。
VB裡子程序分為:過程和函數;

以自定義一個可以計算兩數之和的函數為例:
說明:本函數需要兩個參數,這兩個參數就是你要它計算和的兩個加數,返回一個值,就是和。

在窗體上添加一個按鈕Command1
代碼如下:
Option Explicit
Private Sub Command1_Click()
Dim a As Single
Dim b As Single
a = 12.5
b = 20.8
Print MyAdd(a, b) '調用自定義函數
End Sub
Private Function MyAdd(ByVal x As Single, ByVal y As Single) As Single
MyAdd = x + y
End Function
這最後三行代碼就是一個自定義計算兩數之和的函數,其中;

MyAdd -- 函數名稱,函數具有類型,決定了返回值的類型

x,y ---- 就是2個參數,就是形式參數,可以看到參數需要定義類型
在調用自定義函數的語句 MyAdd(a, b)中,a,b就是實際參數;
在自定義函數中形式參數前用ByVal,說明該參數執行的數值傳遞執行調用,就是把實際參數的值傳遞給對應的形式參數;
而要特別注意幾點;
1,實際參數與形式參數個數相等;且一一對應,類型一致。
2,這個例子裡,a對應x,b對應y。
3,在自定義函數中形式參數前用ByVal,說明該參數執行的數值傳遞。(還有傳遞地址的,略)
4,對於數值傳遞的形式,實際參數可以是“表達式”。
例如;本例可以用下面的格式調用;
dim x as single
dim y as single
dim z as single
x = 2.3
y =3.14
z = MyAdd(x+y,x-y)
print z
這裡的x+y對應形式參數x,x-y對應形式參數x,
即將 2,3+3.14傳遞給x,2,3-3.14傳遞給y,結果是:4.6
 

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