程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#參數傳遞、引用類型、值類型等的理解,

C#參數傳遞、引用類型、值類型等的理解,

編輯:C#入門知識

C#參數傳遞、引用類型、值類型等的理解,


本博客不屬於技術貼,主要是記錄一些自己對不懂得地方的理解和學習的記錄,請帶著批判的眼光閱讀~

值類型存儲在棧上,引用類型存儲在堆上。棧是由高到低存儲的,遵循先進後出的原則,是內存提前分配好的區域,內存的釋放不由人控制,用完後就會釋放內存。堆是動態分配的內存區域,是無序的,受人為控制釋放,但是達到一定內存存儲點後,會由GC自動釋放內存。

淺拷貝是不完全復制,只會復制頂級對象,對於值類型淺拷貝是完全復制,對於引用類型是拷貝的引用,不是拷貝引用的對象。深拷貝是完全復制,2個之間互不影響。
比如=就是淺拷貝,如果等號兩邊的變量都是值類型的,那麼改變其中一個的值對另一個不會產生影響,但是如果兩邊是引用變量,則拷貝的是變量的引用關系,2個變量指向的是同一個對象實例,因此改變一個的內容,另一個也會改變。

參數傳遞默認是值傳遞(默認),就是屬於淺拷貝,參數的改變與原值沒關系。還有另外3中方法ref傳遞、out傳遞和params傳遞。
ref和out改變的是傳遞參數的方式,將原來的值傳遞改為引用傳遞,傳遞的是對參數變量本身的引用,因此傳遞的參數內容的改變會導致原值的改變
區別是ref要求在傳遞前要初始化賦值,在方法內部可以改變
 out不要求傳遞前賦值,但是必須在返回前進行賦值
都可以返回多個參數,都可以改變傳遞的參數的原值
params傳遞用在參數數目可變且類型一樣是,傳遞的參數在傳入方法時會被編譯成數組的形式


對已聲明的變量重新 new重新建一個實例,內存中新開一塊區域,引用變量重新指向新實例,引用變量存儲的是對該實例的引用的地址值
不加ref和out時:參數傳遞時類似於對該參數進行了淺拷貝,復制了一份,傳遞的參數和原值都是指向同一個實例,在方法內對該參數重新new新建實例時,參數指向改變,但是原值的指向不變,如果是在方法內對參數的內容進行改變,則原值同樣改變,因為參數和原值是指向的同一個實例

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved