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

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

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

    注銷

    注銷

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      112 隨筆 :: 7 文章 :: 18 評論 :: 0 Trackbacks

    ? C#方法中的ref和out

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

    ? ref

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

    ? 有時,我們需要改變原來變量中的值,這時,我們可以向方法傳遞變量的引用,而不是變量的值.引用是一個變量,他可以訪問原來變量的值,修改引用將修改原來變量的值.變量的值存儲在內存中,可以創建一個引用,他指向變量在內存中的位置.當引用被修改時,修改的是內存中的值,因此變量的值可以將被修改.當我們調用一個含有引用參數的方法時,方法中的參數將指向被傳遞給方法的相應變量,因此,我們會明白,為什么當修改參數變量的修改也將導致原來變量的值.

    ? 創建參數按引用傳遞的方法,需使用關鍵字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);

    ? }

    ? }

    ? 通過測試,我們發現,a的值已經被修改為9了.

    ? out

    ? 通過指定返回類型,可以從方法返回一個值,有時候(也許還沒遇到,但是我們應該有這么個方法),需要返回多個值,雖然我們可以使用ref來完成,但是C#專門提供了一個屬性類型,關鍵字為out.介紹完后,我們將說明ref和out的區別.

    ? 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),對本例來說,因為輸出的值要靠x賦值,所以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);

    ? }

    ? }

    ? 通過使用out關鍵字,我們改變了三個變量的值,也就是說out是從方法中傳出值.

    ? 我們發現,ref和out似乎可以實現相同的功能.因為都可以改變傳遞到方法中的變量的值.但是,二者本質本質的區別就是,ref是傳入值,out是傳出值.在含有out關鍵字的方法中,變量必須由方法參數中不含out(可以是ref)的變量賦值或者由全局(即方法可以使用的該方法外部變量)變量賦值,out的宗旨是保證每一個傳出變量都必須被賦值.

    ? 上面代碼中被/**/注釋掉的部分,可以直接使用.也就是說,在調用方法前可以不初始化變量.但是"x1"是要賦值的,否則要報錯.而ref參數,在傳遞給方法時,就已經是還有值的了,所以ref側重修改.out側重輸出.

    posted on 2006-11-23 20:48 注銷..... 閱讀(339) 評論(0)  編輯  收藏 所屬分類: .net摘要
    主站蜘蛛池模板: 亚洲人成在线免费观看| a成人毛片免费观看| 18禁免费无码无遮挡不卡网站 | 中文字幕免费在线看线人| 亚洲AV无码专区在线播放中文| 黄桃AV无码免费一区二区三区 | 久久免费高清视频| 久久亚洲AV成人无码电影| 香港a毛片免费观看 | 久久久精品免费视频| 亚洲Aⅴ无码专区在线观看q| 三年片在线观看免费观看大全一| 亚洲视频在线一区| 99久久这里只精品国产免费| 亚洲乱色伦图片区小说| 免费一级成人毛片| fc2免费人成在线视频| 久久亚洲国产午夜精品理论片| 四虎国产精品永久免费网址| 亚洲娇小性xxxx| 免费在线观看a级毛片| 中文在线观看免费网站| 99久久亚洲精品无码毛片| 免费可以在线看A∨网站| 杨幂最新免费特级毛片| 亚洲精品无码成人片久久| 最近中文字幕mv免费高清在线| 亚洲最大天堂无码精品区| 亚洲国产成人久久一区WWW| 另类免费视频一区二区在线观看| 亚洲国产福利精品一区二区| 免费一级毛片在线观看| 国产好大好硬好爽免费不卡| 亚洲色精品VR一区区三区| 亚洲午夜av影院| 手机在线看永久av片免费| 乱人伦中文视频在线观看免费| 亚洲AV无码乱码国产麻豆穿越 | 国产成人亚洲精品影院| 国产成人免费高清激情明星| 无套内谢孕妇毛片免费看看|