<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    注銷

    注銷

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      112 隨筆 :: 7 文章 :: 18 評(píng)論 :: 0 Trackbacks

    ? C#方法中的ref和out

    ? {大部分參照<<21天學(xué)通C#>>,小部分寫了自己的感受,編程功底比較差,只能寫這么多,多包涵}

    ? ref

    ? 通常我們向方法中傳遞的是值.方法獲得的是這些值的一個(gè)拷貝,然后使用這些拷貝,當(dāng)方法運(yùn)行完畢后,這些拷貝將被丟棄,而原來(lái)的值不將受到影響.此外我們還有其他向方法傳遞參數(shù)的形式,引用(ref)和輸出(out).

    ? 有時(shí),我們需要改變?cè)瓉?lái)變量中的值,這時(shí),我們可以向方法傳遞變量的引用,而不是變量的值.引用是一個(gè)變量,他可以訪問(wèn)原來(lái)變量的值,修改引用將修改原來(lái)變量的值.變量的值存儲(chǔ)在內(nèi)存中,可以創(chuàng)建一個(gè)引用,他指向變量在內(nèi)存中的位置.當(dāng)引用被修改時(shí),修改的是內(nèi)存中的值,因此變量的值可以將被修改.當(dāng)我們調(diào)用一個(gè)含有引用參數(shù)的方法時(shí),方法中的參數(shù)將指向被傳遞給方法的相應(yīng)變量,因此,我們會(huì)明白,為什么當(dāng)修改參數(shù)變量的修改也將導(dǎo)致原來(lái)變量的值.

    ? 創(chuàng)建參數(shù)按引用傳遞的方法,需使用關(guān)鍵字ref.例;

    ? using System;

    ? class gump

    ? {

    ? public double square(ref double x)

    ? {

    ? x=x*x;

    ? return x;

    ? }

    ? }

    ? class TestApp

    ? {

    ? public static void Main()

    ? {

    ? gump doit=new gump();

    ? double a=3;

    ? double b=0;

    ? Console.WriteLine("Before square->a={0},b={1}",a,b);

    ? b=doit.square(ref a);

    ? Console.WriteLine("After square->a={0},b={1}",a,b);

    ? }

    ? }

    ? 通過(guò)測(cè)試,我們發(fā)現(xiàn),a的值已經(jīng)被修改為9了.

    ? out

    ? 通過(guò)指定返回類型,可以從方法返回一個(gè)值,有時(shí)候(也許還沒(méi)遇到,但是我們應(yīng)該有這么個(gè)方法),需要返回多個(gè)值,雖然我們可以使用ref來(lái)完成,但是C#專門提供了一個(gè)屬性類型,關(guān)鍵字為out.介紹完后,我們將說(shuō)明ref和out的區(qū)別.

    ? using System;

    ? class gump

    ? {

    ? public void math_routines(double x,out double half,out double squared,out double cubed)

    ? //可以是:public void math_routines(//ref double x,out double half,out double squared,out double cubed)

    ? //但是,不可以這樣:public void math_routines(out double x,out double half,out double squared,out double cubed),對(duì)本例來(lái)說(shuō),因?yàn)檩敵龅闹狄縳賦值,所以x不能再為輸出值

    ? {

    ? half=x/2;

    ? squared=x*x;

    ? cubed=x*x*x;

    ? }

    ? }

    ? class TestApp

    ? {

    ? public static void Main()

    ? {

    ? gump doit=new gump();

    ? double x1=600;

    ? double half1=0;

    ? double squared1=0;

    ? double cubed1=0;

    ? /*

    ? double x1=600;

    ? double half1;

    ? double squared1;

    ? double cubed1;

    ? */

    ? Console.WriteLine("Before method->x1={0}",x1);

    ? Console.WriteLine("half1={0}",half1);

    ? Console.WriteLine("squared1={0}",squared1);

    ? Console.WriteLine("cubed1={0}",cubed1);

    ? doit.math_rountines(x1,out half1,out squared1,out cubed1);

    ? Console.WriteLine("After method->x1={0}",x1);

    ? Console.WriteLine("half1={0}",half1);

    ? Console.WriteLine("squared1={0}",squared1);

    ? Console.WriteLine("cubed1={0}",cubed1);

    ? }

    ? }

    ? 通過(guò)使用out關(guān)鍵字,我們改變了三個(gè)變量的值,也就是說(shuō)out是從方法中傳出值.

    ? 我們發(fā)現(xiàn),ref和out似乎可以實(shí)現(xiàn)相同的功能.因?yàn)槎伎梢愿淖儌鬟f到方法中的變量的值.但是,二者本質(zhì)本質(zhì)的區(qū)別就是,ref是傳入值,out是傳出值.在含有out關(guān)鍵字的方法中,變量必須由方法參數(shù)中不含out(可以是ref)的變量賦值或者由全局(即方法可以使用的該方法外部變量)變量賦值,out的宗旨是保證每一個(gè)傳出變量都必須被賦值.

    ? 上面代碼中被/**/注釋掉的部分,可以直接使用.也就是說(shuō),在調(diào)用方法前可以不初始化變量.但是"x1"是要賦值的,否則要報(bào)錯(cuò).而ref參數(shù),在傳遞給方法時(shí),就已經(jīng)是還有值的了,所以ref側(cè)重修改.out側(cè)重輸出.

    posted on 2006-11-23 20:48 注銷..... 閱讀(348) 評(píng)論(0)  編輯  收藏 所屬分類: .net摘要
    主站蜘蛛池模板: 日韩免费毛片视频| 亚洲JIZZJIZZ中国少妇中文| 999久久久免费精品播放| 美女裸身网站免费看免费网站| 成人av免费电影| 中文字幕中韩乱码亚洲大片 | 永久免费视频网站在线观看| 女人张腿给男人桶视频免费版| 亚洲伊人精品综合在合线| 免费人成视频在线播放| 国产午夜无码精品免费看| 野花高清在线观看免费完整版中文| 中文字幕日韩亚洲| 三级黄色免费观看| 亚洲av无码成人精品区| 一级特级aaaa毛片免费观看| 精品国产污污免费网站aⅴ| 国产啪亚洲国产精品无码| 中国极品美軳免费观看| 亚洲成人激情在线| 九九综合VA免费看| 亚洲AV日韩精品久久久久| 51视频精品全部免费最新| 亚洲美国产亚洲AV| 青青青国产手机频在线免费观看| 亚洲 无码 在线 专区| 亚洲国产综合精品中文第一| 在线观看人成视频免费无遮挡| 日韩免费在线观看| 久久久久久久久久久免费精品| 亚洲AV成人精品日韩一区18p| 一本一道dvd在线观看免费视频 | 亚洲愉拍99热成人精品热久久 | 亚洲精品永久在线观看| 亚洲成A∨人片天堂网无码| 国偷自产一区二区免费视频| 亚洲国产成人无码av在线播放 | 亚洲AV电影院在线观看| 最近中文字幕mv免费高清视频7| 亚洲av永久无码精品三区在线4| 1000部拍拍拍18勿入免费视频软件|