<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          C#值類(lèi)型和引用類(lèi)型的區(qū)別

          共 2875字,需瀏覽 6分鐘

           ·

          2021-09-03 19:21

          C#值類(lèi)型,作為函數(shù)形參,形參被修改,不影響原值

          這是我們?cè)诔跏紝W(xué)習(xí)編程時(shí)需要記住的內(nèi)容,我們也是一直這樣踐行的。

          先說(shuō)結(jié)論:這是不準(zhǔn)確的(我都不敢說(shuō)不正確??)。


          為什么提出這樣看似很淺顯的問(wèn)題,是因?yàn)橛写挝以谑褂?code style="white-space:pre-wrap;-webkit-tap-highlight-color: transparent;color: rgb(221, 17, 68);line-height: 1.75;font-family: -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 13.5px;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">ArraySegment<byte>值類(lèi)型時(shí),有感而發(fā)。

          這是一個(gè)托管的值類(lèi)型,表示array的一個(gè)片斷, 在用做websocket接收數(shù)據(jù)的載體時(shí)我發(fā)現(xiàn)每次值傳遞后, 這個(gè)ArraySegment<byte>貌似發(fā)生了變化。這勾起了我的探究欲。

          我們做一個(gè)簡(jiǎn)單的實(shí)驗(yàn), 來(lái)證明【值類(lèi)型作為函數(shù)形參, 形參被修改,不影響原值】不準(zhǔn)確。

          struct Slice 
              {
                    public Array Array { get; set; }
                    public int Offset { get; set; }
                    public int Count { get; set; }
              }

              class Program
              {
                  static void Main(string[] args)
                  {
                      var slice = new Slice { Array = Array.CreateInstance(typeof(int), 5)};
            Test(slice);

                      foreach(var i  in slice.Array)
                      {
                          Console.WriteLine(i); 
                      }
                      Console.ReadLine();
                  }
          // 值類(lèi)型傳參,值傳給tmp變量
                  static void Test(Slice tmp)
                  {
                      tmp.Array.SetValue(1,1);
                      tmp.Offset = 1;
                      tmp.Count = 1;
                  }
              }
              
           // 輸出  0 1 0 0 0
          slice變量的引用類(lèi)型屬性體現(xiàn)了變化,值類(lèi)型Offset Count屬性不會(huì)變化。

          這個(gè)簡(jiǎn)單的Demo告訴我們:

          大部分情況下:“值類(lèi)型作為函數(shù)形參,形參被修改,不影響原值”, 但是如果修改的是值類(lèi)型的引用類(lèi)型字段,原值類(lèi)型照樣能體現(xiàn)修改

          歸根到底由值類(lèi)型和引用類(lèi)型的特性決定:

          值類(lèi)型的變量直接存儲(chǔ)數(shù)據(jù),而引用類(lèi)型的變量持有的是數(shù)據(jù)的引用,數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)堆中;

          寬泛地講:函數(shù)傳參,都是值傳遞(拷貝), 只是引用類(lèi)型傳遞的是原對(duì)象的引用或地址值。

          本篇文章沒(méi)啥干貨,算是日常小記吧,各大佬輕噴。

          基礎(chǔ)不牢 地動(dòng)山搖








          回復(fù) 【關(guān)閉】學(xué)關(guān)
          回復(fù) 【實(shí)戰(zhàn)】獲取20套實(shí)戰(zhàn)源碼
          回復(fù) 【被刪】學(xué)個(gè)
          回復(fù) 【訪(fǎng)客】學(xué)訪(fǎng)
          回復(fù) 【小程序】學(xué)獲取15套【入門(mén)+實(shí)戰(zhàn)+賺錢(qián)】小程序源碼
          回復(fù) 【python】學(xué)微獲取全套0基礎(chǔ)Python知識(shí)手冊(cè)
          回復(fù) 【2019】獲取2019 .NET 開(kāi)發(fā)者峰會(huì)資料PPT
          回復(fù) 【加群】加入dotnet微信交流群


          瀏覽 43
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产欧美韩国在线观看 | 黄色在线免看 | 丁香六月婷婷综合缴 | 天天撸在线观看 | 色噜噜狠狠一区二区三区 |