日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

paramas ref out的使用

 青格兒 2010-01-29

params 關(guān)鍵字可以指定在參數(shù)數(shù)目可變處采用參數(shù)的方法參數(shù)。

  1. 在方法聲明中的 params 關(guān)鍵字之后不允許任何其他參數(shù),并且在方法聲明中只允許一個 params 關(guān)鍵字。

示例

字面意思比較難懂,所以看示例很有用。

// 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()
    
{
        
// 一般做法是先構(gòu)造一個對象數(shù)組,然后將此數(shù)組作為方法的參數(shù)
        object[] arr = new object[3] { 100, 'a', "keywords" };
         UseParams(arr);

        
// 而使用了params修飾方法參數(shù)后,我們可以直接使用一組對象作為參數(shù)
        
// 當(dāng)然這組參數(shù)需要符合調(diào)用的方法對參數(shù)的要求
         UseParams(100, 'a', "keywords");

         Console.Read();
     }

}

ref

ref 關(guān)鍵字使參數(shù)按引用傳遞。其效果是,當(dāng)控制權(quán)傳遞回調(diào)用方法時,在方法中對參數(shù)所做的任何更改都將反映在該變量中。

  1. 若要使用 ref 參數(shù),則方法定義和調(diào)用方法都必須顯式使用 ref 關(guān)鍵字。
  2. 傳遞到 ref 參數(shù)的參數(shù)必須最先初始化。這與 out 不同,out 的參數(shù)在傳遞之前不需要顯式初始化。
  3. 屬性不是變量,因此不能作為 ref 參數(shù)傳遞。
  4. 盡管 ref 和 out 在運(yùn)行時的處理方式不同,但它們在編譯時的處理方式是相同的。因此,如果一個方法采用 ref 參數(shù),而另一個方法采用 out 參數(shù),則無法重載這兩個方法。例如,從編譯的角度來看,以下代碼中的兩個方法是完全相同的。如果嘗試這么做,將導(dǎo)致不能編譯該代碼。
  5. 如果一個方法采用 ref 或 out 參數(shù),而另一個方法不采用這兩類參數(shù),則可以進(jìn)行重載。

示例

按引用傳遞值類型是有用的,但是 ref 對于傳遞引用類型也是很有用的。這允許被調(diào)用的方法修改該引用所引用的對象,因?yàn)橐帽旧硎前匆脕韨鬟f的。

// 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;

        
// 查看調(diào)用方法之前的值
         Console.WriteLine("Before the method calling: i = {0}", i);

         UseRef(
ref i);

        
// 查看調(diào)用方法之后的值
         Console.WriteLine("After the method calling: i = {0}", i);
         Console.Read();
     }

}


/*
控制臺輸出:
Before the method calling : i = 10
i = 110
After the method calling: i = 110
*/

 

 

C# ref與out區(qū)別

在C# 中,既可以通過值也可以通過引用傳遞參數(shù)。通過引用傳遞參數(shù)允許函數(shù)成員更改參數(shù)的值,并保持該更改。若要通過引用傳遞參數(shù), 可使用ref或out關(guān)鍵字。ref和out這兩個關(guān)鍵字都能夠提供相似的功效,其作用也很像C中的指針變量。它們的區(qū)別是:

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

2、使用ref和out時,在方法的參數(shù)和執(zhí)行方法時,都要加Ref或Out關(guān)鍵字。以滿足匹配。

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

注:在C#中,方法的參數(shù)傳遞有四種類型:傳值(by value),傳址(by reference),輸出參數(shù)(by output),數(shù)組參數(shù)(by array)。傳值參數(shù)無需額外的修飾符,傳址參數(shù)需要修飾符ref,輸出參數(shù)需要修飾符out,數(shù)組參數(shù)需要修飾符params。傳值參數(shù)在方法調(diào)用過程中如果改變了參數(shù)的值,那么傳入方法的參數(shù)在方法調(diào)用完成以后并不因此而改變,而是保留原來傳入時的值。傳址參數(shù)恰恰相反,如果方法調(diào)用過程改變了參數(shù)的值,那么傳入方法的參數(shù)在調(diào)用完成以后也隨之改變。實(shí)際上從名稱上我們可以清楚地看出兩者的含義--傳值參數(shù)傳遞的是調(diào)用參數(shù)的一份拷貝,而傳址參數(shù)傳遞的是調(diào)用參數(shù)的內(nèi)存地址,該參數(shù)在方法內(nèi)外指向的是同一個存儲位置。

方法參數(shù)上的 ref 方法參數(shù)關(guān)鍵字使方法引用傳遞到方法的同一個變量。當(dāng)控制傳遞回調(diào)用方法時,在方法中對參數(shù)所做的任何更改都將反映在該變量中。

若要使用 ref 參數(shù),必須將參數(shù)作為 ref 參數(shù)顯式傳遞到方法。ref 參數(shù)的值被傳遞到 ref 參數(shù)。

傳遞到 ref 參數(shù)的參數(shù)必須最先初始化。將此方法與 out 參數(shù)相比,后者的參數(shù)在傳遞到 out 參數(shù)之前不必顯式初始化。

屬性不是變量,不能作為 ref 參數(shù)傳遞。

如果兩種方法的聲明僅在它們對 ref 的使用方面不同,則將出現(xiàn)重載。但是,無法定義僅在 ref 和 out 方面不同的重載。

out

方法參數(shù)上的 out 方法參數(shù)關(guān)鍵字使方法引用傳遞到方法的同一個變量。當(dāng)控制傳遞回調(diào)用方法時,在方法中對參數(shù)所做的任何更改都將反映在該變量中。

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

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

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

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

 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多