国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 03:03:02
字體:
來源:轉載
供稿:網友

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

---------------------- asp.net+Unity開發、.Net培訓、期待與您交流! ----------------------

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             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 變量時,還是必須先要對它賦一次值,這就顯得調用之前的賦值變得毫無意義。

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又有什么作用,現在已經能清楚地運用它們了。即使這是些很簡單的內容,但是卻是很重要的基礎,我需要把它記錄下來,以便于提醒自己。現在發現,寫學習筆記不僅可以提高自己的表達能力,還有助于學習。

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

---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ---------------------- 詳細請查看:www.itheima.com


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 株洲市| 平潭县| 秭归县| 灌阳县| 招远市| 景德镇市| 兴国县| 府谷县| 于田县| 偃师市| 临城县| 丽水市| 神木县| 泽库县| 张家港市| 淮南市| 宝鸡市| 井冈山市| 满洲里市| 多伦县| 伊宁县| 宜州市| 保亭| 宁都县| 华阴市| 漠河县| 贵定县| 静乐县| 六安市| 区。| 砀山县| 开鲁县| 柯坪县| 昌江| 普定县| 博罗县| 曲水县| 宽城| 沧州市| 诸城市| 大关县|