日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中方法的参数四种类型(值参数、ref、out、params)详解

發(fā)布時間:2025/4/14 C# 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中方法的参数四种类型(值参数、ref、out、params)详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

看公司程序偶然看到ref引用,于是查找一了番,現(xiàn)整理如下:

?   1. 值參數(shù) (不加任何修飾符,是默認(rèn)的類型)
?? ? ?2. 引用型參數(shù) (以ref 修飾符聲明)
?? ? ?3. 輸出參數(shù) (以out 修飾符聲明)
?? ? ?4. 數(shù)組型參數(shù) (以params 修飾符聲明)

1. 值類型:
?? ?值類型是方法默認(rèn)的參數(shù)類型,采用的是值拷貝的方式。也就是說,如果使用的是值類型,則可以在方法中更改該值,但當(dāng)控制傳遞回調(diào)用過程時,不會保留更改的值。
?? ?使用值類型的例子如:(下面的Swap()未能實(shí)現(xiàn)交換的功能,因?yàn)榭刂苽鬟f回調(diào)用方時不保留更改的值)

  • using?System;?
  • class?Test{?????
  • static?void?Swap(int?x,?int?y)?????
  • {?????????
  • int?temp?=?x;?????????
  • x?=?y;?????????
  • y?=?temp;?????
  • }?????
  • static?void?Main()?????
  • {?????????
  • int?i?=?1,?j?=?2;????????
  • Swap(i,?j);????????
  • Console.WriteLine("i?=?{0},?j?=?{1}",?i,?j);?????
  • }?
  • }/*?*?輸出結(jié)果為:?i=1,?j=2?*?未能實(shí)現(xiàn)Swap()計劃的功能?*/?
  • 2. 引用類型(ref類型)

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

      2.1. 若要使用 ref 參數(shù),則方法定義和調(diào)用方法都必須顯式使用 ref 關(guān)鍵字。
      2.2. 傳遞到 ref 參數(shù)的參數(shù)必須最先初始化。這與 out 不同,out 的參數(shù)在傳遞之前不需要顯式初始化。
    2.3. 如果一個方法采用 ref 或 out 參數(shù),而另一個方法不采用這兩類參數(shù),則可以進(jìn)行重載。

    相關(guān)實(shí)例如下:?

  • using?System;?
  • class?Test{?????
  • static?void?Swap(ref?int?x,?ref?int?y)?????
  • {?????????
  • int?temp?=?x;?????????
  • x?=?y;????????
  • y?=?temp;?????
  • }????
  • static?void?Main()?????
  • {????????
  • int?i?=?1,?j?=?2;?????????
  • Swap(ref?i,?ref?j);?????????
  • Console.WriteLine("i?=?{0},?j?=?{1}",?i,?j);???
  • }?
  • }/*?*?引用類型實(shí)現(xiàn)了Swap()計劃的功能:?*?輸出為:?*?i?=?2,?j?=1?*/?
  • 3. 輸出類型(out類型)
      out 關(guān)鍵字會導(dǎo)致參數(shù)通過引用來傳遞。這與 ref 關(guān)鍵字類似。
    ?? ?與 ref 的不同之處:
    ?? ? ?3.1. ref 要求變量必須在傳遞之前進(jìn)行初始化,out 參數(shù)傳遞的變量不需要在傳遞之前進(jìn)行初始化。

    3.2. 盡管作為 out 參數(shù)傳遞的變量不需要在傳遞之前進(jìn)行初始化,但需要在調(diào)用方法初始化以便在方法返回之前賦值。

    示例如下:?

  • using?System;?
  • class?Test?
  • {?????
  • static?void?Swap(out?int?x,?out?int?y)?????
  • {????????//在這里進(jìn)行了i和j的初始化?????????
  • x?=?1;????????y?=?2;?????????
  • int?temp?=?x;????????
  • x?=?y;?????????
  • y?=?temp;?????
  • }?????
  • static?void?Main()?????
  • {????????//此處可以不進(jìn)行i和j的初始化?????????
  • int?i?,?j?;????????
  • Swap(out?i,?out?j);?????????
  • Console.WriteLine("i?=?{0},?j?=?{1}",?i,?j);?????
  • }?
  • }/*?*?輸出類型也實(shí)現(xiàn)了Swap()計劃的功能:?*?輸出為:?*?i?=?2,?j?=1?*/?
  • 4. 數(shù)組型參數(shù)類型(params類型)

      params 關(guān)鍵字可以指定在參數(shù)數(shù)目可變處采用參數(shù)的方法參數(shù)。也就是說。使用params可以自動把你傳入的值按照規(guī)則轉(zhuǎn)換為一個新建的數(shù)組。

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

    ?? ?示例如下:

  • 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??
  • {?100,?'a',?"keywords"?};?????????
  • UseParams(arr);????????//?而使用了params修飾方法參數(shù)后,我們可以直接使用一組對象作為參數(shù)????????//?當(dāng)然這組參數(shù)需要符合調(diào)用的方法對參數(shù)的要求????????
  • UseParams(100,?'a',?"keywords");????????Console.Read();????
  • }?
  • }?
  • 轉(zhuǎn)載于:https://www.cnblogs.com/lxxhome/archive/2013/03/12/2955059.html

    總結(jié)

    以上是生活随笔為你收集整理的C#中方法的参数四种类型(值参数、ref、out、params)详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。