欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于params,ref,out的參數(shù)問(wèn)題詳解

 更新時(shí)間:2013年06月05日 16:25:32   作者:  
本篇文章是對(duì)params,ref,out的參數(shù)問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

最近在寫(xiě)程序時(shí)遇到params,ref,out 參數(shù)問(wèn)題?;仡^有自習(xí)看了看MSDN,才鞏固了基礎(chǔ)?,F(xiàn)在和大家分享一下。
params
params 關(guān)鍵字在方法成員的參數(shù)列表中使用,為該方法提供了參數(shù)個(gè)數(shù)可變的能力,它在只能出現(xiàn)一次并且不能在其后再有參數(shù)定義(之前可以)。
示例:

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class App
{
//第一個(gè)參數(shù)必須是整型,但后面的參數(shù)個(gè)數(shù)是可變的。
//而且由于定的是object數(shù)組,所有的數(shù)據(jù)類型都可以做為參數(shù)傳入
public static void UseParams(int id, params object[] list)
{
Console.WriteLine(id);
for (int i = 0; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
}
static void Main()
{
//可變參數(shù)部分傳入了三個(gè)參數(shù),都是字符串類型
UseParams(1, "a", "b", "c");
//可變參數(shù)部分傳入了四個(gè)參數(shù),分別為字符串、整數(shù)、浮點(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)數(shù)組
UseParams(2, "d", 100, 33.33, new double[] {1.1, 2.2});
Console.ReadLine();
}
}
}

ref
ref 關(guān)鍵字使參數(shù)按引用傳遞。其效果是,當(dāng)控制權(quán)傳遞回調(diào)用方法時(shí),在方法中對(duì)參數(shù)所做的任何更改都將反映在該變量中。
1.若要使用 ref 參數(shù),則方法定義和調(diào)用方法都必須顯式使用 ref 關(guān)鍵字。
2.傳遞到 ref 參數(shù)的參數(shù)必須最先初始化。這與 out 不同,out 的參數(shù)在傳遞之前不需要顯式初始化。
3.屬性不是變量,因此不能作為 ref 參數(shù)傳遞。
4.盡管 ref 和 out 在運(yùn)行時(shí)的處理方式不同,但它們?cè)诰幾g時(shí)的處理方式是相同的。因此,如果一個(gè)方法采用 ref 參數(shù),而另一個(gè)方法采用 out 參數(shù),則無(wú)法重載這兩個(gè)方法。例如,從編譯的角度來(lái)看,以下代碼中的兩個(gè)方法是完全相同的。如果嘗試這么做,將導(dǎo)致不能編譯該代碼。
5.如果一個(gè)方法采用 ref 或 out 參數(shù),而另一個(gè)方法不采用這兩類參數(shù),則可以進(jìn)行重載。
示例:
按引用傳遞值類型是有用的,但是 ref 對(duì)于傳遞引用類型也是很有用的。這允許被調(diào)用的方法修改該引用所引用的對(duì)象,因?yàn)橐帽旧硎前匆脕?lái)傳遞的。
復(fù)制代碼 代碼如下:

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();
     }
}

out
out 關(guān)鍵字會(huì)導(dǎo)致參數(shù)通過(guò)引用來(lái)傳遞。這與 ref 關(guān)鍵字類似。
與 ref 的不同之處:
1.ref 要求變量必須在傳遞之前進(jìn)行初始化。
2.盡管作為 out 參數(shù)傳遞的變量不需要在傳遞之前進(jìn)行初始化,但需要調(diào)用方法以便在方法返回之前賦值。
示例:
與 ref 示例不同的地方只要將 ref 改為 out,然后變量 i 僅需要聲明即可。
復(fù)制代碼 代碼如下:

static void Main()
{
    //int i = 10; 改為
    int i;
}

相關(guān)文章

  • 使用linq to xml修改app.config示例(linq讀取xml)

    使用linq to xml修改app.config示例(linq讀取xml)

    這篇文章主要介紹了使用linq to xml修改app.config示例,需要的朋友可以參考下
    2014-02-02
  • c# 生成二維碼的示例

    c# 生成二維碼的示例

    這篇文章主要介紹了c# 生成二維碼的示例,幫助大家更好的理解和使用c#編程語(yǔ)言,感興趣的朋友可以了解下
    2020-11-11
  • Unity腳本自動(dòng)添加頭部注釋的全過(guò)程

    Unity腳本自動(dòng)添加頭部注釋的全過(guò)程

    在一些公司需要代碼嚴(yán)格的管理,有時(shí)候會(huì)需要用到每個(gè)腳本的頭部做一些介紹,所以下面這篇文章主要給大家介紹了關(guān)于Unity腳本自動(dòng)添加頭部注釋的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • C#委托delegate實(shí)例解析

    C#委托delegate實(shí)例解析

    這篇文章主要介紹了C#委托delegate實(shí)例解析,對(duì)C#的委托做了較為深入的剖析,很適合初學(xué)者學(xué)習(xí),需要的朋友可以參考下
    2014-08-08
  • C# textbox實(shí)時(shí)輸入值檢測(cè)方式

    C# textbox實(shí)時(shí)輸入值檢測(cè)方式

    這篇文章主要介紹了C# textbox實(shí)時(shí)輸入值檢測(cè)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C#中Timer使用及解決重入問(wèn)題

    C#中Timer使用及解決重入問(wèn)題

    本文主要介紹了C#中Timer使用及解決重入問(wèn)題的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • 總結(jié)C#網(wǎng)絡(luò)編程中對(duì)于Cookie的設(shè)定要點(diǎn)

    總結(jié)C#網(wǎng)絡(luò)編程中對(duì)于Cookie的設(shè)定要點(diǎn)

    這篇文章主要介紹了總結(jié)C#網(wǎng)絡(luò)編程中對(duì)于Cookie的設(shè)定要點(diǎn),文中還給出了一個(gè)cookie操作實(shí)例僅供參照,需要的朋友可以參考下
    2016-04-04
  • C#中的Task.Delay()和Thread.Sleep()區(qū)別(代碼案例)

    C#中的Task.Delay()和Thread.Sleep()區(qū)別(代碼案例)

    Task.Delay(),async/await和CancellationTokenSource組合起來(lái)使用可以實(shí)現(xiàn)可控制的異步延遲。本文通過(guò)多種代碼案例給大家分析C#中的Task.Delay()和Thread.Sleep()知識(shí),感興趣的朋友一起看看吧
    2021-06-06
  • WinForm實(shí)現(xiàn)最小化到系統(tǒng)托盤(pán)方法實(shí)例詳解

    WinForm實(shí)現(xiàn)最小化到系統(tǒng)托盤(pán)方法實(shí)例詳解

    這篇文章主要介紹了WinForm實(shí)現(xiàn)最小化到系統(tǒng)托盤(pán)方法,實(shí)例分析了C#中實(shí)現(xiàn)WinForm最小化到系統(tǒng)托盤(pán)所需的相關(guān)控件與使用技巧,需要的朋友可以參考下
    2015-05-05
  • C#線程池用法詳細(xì)介紹

    C#線程池用法詳細(xì)介紹

    在C#編程語(yǔ)言中,使用線程池可以并行地處理工作,當(dāng)強(qiáng)制線程和更新進(jìn)度條時(shí),會(huì)使用內(nèi)建架構(gòu)的ThreadPool類,為批處理使用多核結(jié)構(gòu),這里我們來(lái)看在C#編程語(yǔ)言中一些關(guān)于來(lái)自System.Threading的ThreadPool的用法的例子
    2013-11-11

最新評(píng)論