91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ref 與 out

發布時間:2020-07-13 14:28:51 來源:網絡 閱讀:411 作者:海灬未眠 欄目:開發技術

一.ref關鍵字使參數按引用傳遞。其效果是,當控制權傳遞回調用方法時,在方法中對參數所做的任何改變都將反


映在該變量中。若要使用ref參數,則方法定義和調用方法都必須顯式使用ref關鍵字。也即是說,在方法中對參數的


設置和改變將會直接影響函數調用之處。無論函數的定義還是調用時均不可忽略關鍵字ref。


代碼①:  

        static void Main(string[] args)
        {
            int x = 10;
            int y = 20;
            M(ref x, ref y);
            Console.WriteLine("x = {0} , y = {1}" , x , y);
            Console.ReadLine();
        }
        static void M(ref int a , ref int b)
        {
            a = 521;
            b = 520; 
        }


代碼②:  

        static void Main(string[] args)
        {
            int x = 10;
            int y = 20;
            M(ref x, ref y);
            Console.WriteLine("x = {0} , y = {1}" , x , y);
            Console.ReadLine();
        }
        static void M(ref int a , ref int b)
        {
            a = 1000;
            b = 1; 
        }



在此可以看出,在方法中對參數所做的任何更改都將反映在該變量中,而在main函數中對參數的賦值卻沒有起到作用


,這是不是說明不需要進行初始化呢?看下面一個例子。


代碼③:  

        static void Main(string[] args)
        {
            int x ;
            int y ;
            M(ref x, ref y); //使用了未賦值的局部變量 x,y 。必須要初始化,否則編譯通不過
            Console.WriteLine("x = {0} , y = {1}" , x , y);
            Console.ReadLine();
        }
        static void M(ref int a , ref int b)
        {
            a = 521;
            b = 520; 
        }


二.這說明,ref定義的參數在使用前必須初始化 , 無論在函數定義的時候參數有沒有賦予初始值。這條正好區分


out指定的參數可以不在調用函數的時候進行初始化。


三.對out來說,第一條同樣適用。將代碼①以及②中的ref全部改成out,則可與使用ref得到同樣的結果。


四.out指定的參數必須在函數定義的時候就賦初始值。否則出現錯誤。對比ref指定的參數則

可以不在函數內部賦初始值,在函數調用的時候在函數調用的時候哦在賦值也可以。


       

        static void Main(string[] args)
        {
            int x = 10;
            int y  = 11;
            M(ref x, ref y); 
            Console.WriteLine("x = {0} , y = {1}" , x , y);
            Console.ReadLine();
        }
        static void M(ref int a , ref int b)
        {
            int temp;
            temp = a;
            a = b;
            b = temp;
        }


代碼④:

        static void Main(string[] args)
        {
            int x = 10;
            int y  = 11;
            M(out x, out y); 
            Console.WriteLine("x = {0} , y = {1}" , x , y);
            Console.ReadLine();
        }
        static void M(out int a , out int b)
        {
            int temp;
            temp = a;//使用了未賦值的out參數,a在參數內部沒有賦值,所以出錯。
            a = b;//使用了未賦值的out參數,b在參數內部沒有賦值,所以出錯。
            b = temp;
        }


總結以上四條得到ref和out使用時的區別是:

①.ref指定的參數(例子中的a,b)在函數調用時必須初始化不能為空的引用(x,y)。而指定的參數在函數調用時可以


不初始化(     

        static void M(ref int a , ref int b)
        {
            int temp;
            temp = a;
            a = b;
            b = temp;
        }

    )。

②.out指定的參數在進入函數時會清空自己,必須在函數內部賦初始值。而ref指定的參數不需要。


       

        static void Main(string[] args)
        {
            int x ;
            int y ;
            M(out x, out y); 
            Console.WriteLine("x = {0} , y = {1}" , x , y);
            Console.ReadLine();
        }
        static void M(out int a, out int b)
        {
            a = 1111;
            b = 22222;
        }


用ref時,例子中的x,y必須初始化值,a,b隨便;用out時,M()方法中的參數a,b必須在M()方法內部初始化值,x,y隨便。


===========================================================================================


ref和out的區別在C# 中,既可以通過值也可以通過引用傳遞參數。通過引用傳遞參數允許函數成員更改參數的值,并保持該更改。若要通過引用傳遞參數, 可使用ref或out關鍵字。ref和out這兩個關鍵字都能夠提供相似的功效,


其作用也很像C中的指針變量。它們的區別是:


1、使用ref型參數時,傳入的參數必須先被初始化。對out而言,必須在方法中對其完成初始化。


2、使用ref和out時,在方法的參數和執行方法時,都要加Ref或Out關鍵字。以滿足匹配。


3、out適合用在需要retrun多個返回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。


out方法參數上的 out 方法參數關鍵字使方法引用傳遞到方法的同一個變量。當控制傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。


當希望方法返回多個值時,聲明 out 方法非常有用。使用 out 參數的方法仍然可以返回一個值。一個方法可以有一個以上的 out 參數。


若要使用out參數,必須將參數作為 out 參數顯式傳遞到方法。out 參數的值不會傳遞到 out 參數。

不必初始化作為out參數傳遞的變量。然而,必須在方法返回之前為 out 參數賦值。


屬性不是變量,不能作為out參數傳遞。 


ref是有進有出,而out是只出不進。


=======================================================================================


函數參數默認是值傳遞的,也就是“復制一份”。

 

out和ref傳遞的都是引用而不是值,out側重于輸出使用之前不需賦值而ref在使用之前需要賦值,另外這兩個關鍵字可以變相實現使一個方法輸出多個值。

 

1.寫一個方法,實現MyTryParse的功能

   bool MyTryParse(string s,out intresult)

   用戶只能輸入0到100之間的數寫一個方法,否則提示超出范圍

   返回值表示解析是否成功,result代表解析后的整型值

 

1.形參和實參指向同一地址

2.始終保證形參和實參指向同一地址

 

ref和out不一樣:

ref在實參傳入時保留其值 而out消除其值

 

 

方法編寫的時候的選擇:

若方法只有一個返回值 選擇使用返回值類型

例:

public static int ReturnInt()
{
         return 1;
}


如果返回值多于1個 選擇使用out

public static void ReturnInt(out int a,out int b)
{
           //a、b賦初值
           // a、b參與運算
}

調用時: int c;int d;  ReturnInt(out c,out d);

 

如果需要直接將結果返回到某一個變量上 使用ref

public static void ChangeString(ref String s)
{
                 s= "000"+s;
}

調用時: String ss = "1";  ChangeString(ref ss);

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宽甸| 通海县| 古浪县| 黄浦区| 汽车| 南雄市| 樟树市| 连南| 江源县| 仁布县| 页游| 咸宁市| 芒康县| 云霄县| 犍为县| 阿拉善盟| 贵溪市| 石嘴山市| 扎兰屯市| 苏尼特左旗| 田林县| 巴中市| 南城县| 潢川县| 南安市| 东辽县| 绥阳县| 永登县| 崇左市| 颍上县| 伊宁市| 巨野县| 沙田区| 德州市| 凤城市| 西林县| 曲沃县| 桃源县| 张北县| 郧西县| 鹤峰县|