---------------------- asp.net+Unity開發、.Net培訓、期待與您交流! ----------------------
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 else10 {11 Console.WriteLine("{0}不是偶數",num);12 }13 Console.ReadKey();14 }1516 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 else24 {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 變量時,還是必須先要對它賦一次值,這就顯得調用之前的賦值變得毫無意義。
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的值。
params 是關鍵字,可以使得在參數個數可變處采用參數的數組型參數,比如int sum(params int[] values)。
可變參數的作用:使得個數不確定的可變參數以數組的形式傳遞,適合于方法的參數個數未知的情況時,用于傳遞大量的數組集合參數。
可變參數在使用時需注意:
1)不允許將params修飾符與ref和out修飾符組合起來使用。
2)當方法的參數列表中有多個參數時,params修飾的參數必須放在最后,不能放在前面,以免程序不好確定參數究竟有多少個而報錯。比如:int sum(string name,params int[] values)
3)一個方法當然可以包含可變參數和不變參數,兩個可以同時使用。
這樣,有了可變參數,就可以在某些情況下根據特定的需要來確定方法的參數個數。
這是我的第一篇學習日記,知識點可能講的不是很細,但其中的每一點都是我自己歸納出來的,以前只學過點C++基 礎,沒接觸過C#,更不知道有Out參數、Ref參數和可變參數這三個概念,通過學習黑馬基礎入門視頻的C#編程基礎部分,以及查閱相關資料,對這三個知識點已經能夠基本掌握,還記得當初跳著看視頻,不能理解調用int.TryParse方法時,為什么要在參數前加上out,out又有什么作用,現在已經能清楚地運用它們了。即使這是些很簡單的內容,但是卻是很重要的基礎,我需要把它記錄下來,以便于提醒自己。現在發現,寫學習筆記不僅可以提高自己的表達能力,還有助于學習。
我告訴自己,需要堅持下去!
---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ---------------------- 詳細請查看:www.itheima.com
新聞熱點
疑難解答