日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
再聊一次值類型和引用類型

C#值類型,作為函數形參,形參被修改,不影響原值。

創(chuàng)新互聯建站專注于成都網站設計、成都網站制作、網頁設計、網站制作、網站開發(fā)。公司秉持“客戶至上,用心服務”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網絡營銷中找到自己的駐足之地。尊重和關懷每一位客戶,用嚴謹的態(tài)度對待客戶,用專業(yè)的服務創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

這是我們在初始學習編程時需要記住的內容,我們也是一直這樣踐行的。

先說結論:這是不準確的。

為什么提出這樣看似很淺顯的問題,是因為有次我在使用ArraySegment 值類型時,有感而發(fā)。

這是一個托管的值類型,表示array的一個片斷, 在用做websocket接收數據的載體時我發(fā)現每次值傳遞后, 這個ArraySegment 貌似發(fā)生了變化。這勾起了我的探究欲。

我們做一個簡單的實驗, 來證明【值類型作為函數形參, 形參被修改,不影響原值】不準確。

 
 
 
 
  1. struct Slice  
  2.     { 
  3.           public Array Array { get; set; } 
  4.           public int Offset { get; set; } 
  5.           public int Count { get; set; } 
  6.     } 
  7.  
  8.     class Program 
  9.     { 
  10.         static void Main(string[] args) 
  11.         { 
  12.             var slice = new Slice { Array = Array.CreateInstance(typeof(int), 5)}; 
  13.             Test(slice); 
  14.  
  15.             foreach(var i  in slice.Array) 
  16.             { 
  17.                 Console.WriteLine(i);  
  18.             } 
  19.             Console.ReadLine(); 
  20.         } 
  21.   // 值類型傳參,值傳給tmp變量 
  22.         static void Test(Slice tmp) 
  23.         { 
  24.             tmp.Array.SetValue(1,1); 
  25.             tmp.Offset = 1; 
  26.             tmp.Count = 1; 
  27.         } 
  28.     } 
  29.      
  30.  // 輸出  0 1 0 0 0 

slice變量的引用類型屬性體現了變化,值類型Offset Count屬性不會變化。

這個簡單的Demo告訴我們:

大部分情況下:“值類型作為函數形參,形參被修改,不影響原值”, 但是如果修改的是值類型的引用類型字段,原值類型照樣能體現修改。

歸根到底由值類型和引用類型的特性決定:

值類型的變量直接存儲數據,而引用類型的變量持有的是數據的引用,數據存儲在數據堆中;

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


網站標題:再聊一次值類型和引用類型
地址分享:http://www.5511xx.com/article/cdgpohe.html