http://www.aygfsteel.com/ebecket 返還網
          隨筆-140  評論-11  文章-131  trackbacks-0

          引用類型傳值(一道極難有人完全做對的面試題)

          最近碰到一個 數組傳值和引用傳值的問題,剛開始自己還弄錯了,突然想起很久以前一道類似的面試題

          廢話不說,代碼整理如下:(具體詳解以后整理清楚再補上,以免造成誤解,同時望高手給出詳解)

              class Value
              {
                  
          public int i = 36;
              }

              
          class Program
              {
                  
          static void Main(string[] args)
                  { 
                      Program t 
          = new Program();
                      t.first(); 
                      Console.Read(); 
                  }

                  
          public void first()
                  {
                      
          int i = 7;
                      Value v1 
          = new Value();
                      v1.i 
          = 8;
                      second(
          ref v1, i);
                      Console.WriteLine(v1.i 
          + " " + i + " ");

                      Value v2 
          = new Value(); 
                      v2.i 
          = 8;
                      second(v2, i);
                      Console.WriteLine(v2.i 
          + " " + i + " ");
                  }

                  
          public void second(ref Value v, int i)
                  {
                      i 
          = 0;
                      v.i 
          = 16
                      Value val 
          = new Value();
                      v 
          = val;
                      Console.WriteLine(v.i 
          + " " + i + " ");
                  }

                  
          public void second(Value v, int i)
                  {
                      i 
          = 0;
                      v.i 
          = 16;
                      Value val 
          = new Value(); 
                      v 
          = val;
                      Console.WriteLine(v.i 
          + " " + i + " ");
                  }
              }
           

           

          運行結果:

          36 0
          36 7
          36 0
          16 7

           

          初步解答:

          所有的方法參數,如果不指定ref或者out,那就是按副本傳遞的。引用型傳遞的是地址的副本,值類型傳遞的是值的副本。

          在Value val = new Value(); v = val; 之前,second方法內和方法外都是指向同一個對象,所以改變對方法外有效。

          在執行Value val = new Value(); v = val;之后,second方法內的v指向了一個新的對象,并不影響方法外的引用,所以之后的改變對方法外無效。



          轉自
          http://www.cnblogs.com/fengyao/archive/2010/03/24/1693453.html
          posted on 2010-03-31 09:24 becket_zheng 閱讀(285) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 颍上县| 特克斯县| 利辛县| 阿勒泰市| 察隅县| 永昌县| 光泽县| 麻栗坡县| 滦南县| 德化县| 桂阳县| 宝鸡市| 澎湖县| 岢岚县| 通榆县| 汶川县| 京山县| 黄山市| 阿拉善右旗| 安阳市| 集贤县| 会宁县| 屯昌县| 新巴尔虎左旗| 上犹县| 花莲市| 上虞市| 个旧市| 驻马店市| 二连浩特市| 林芝县| 延庆县| 泰州市| 五指山市| 黔南| 克什克腾旗| 嘉鱼县| 自贡市| 青川县| 仙桃市| 建宁县|