值類型與引用類型及ref修飾符與out修飾符的關係

值類型與引用類型的區別;
下面我用一個例子,畫一個圖來說明一下值類型與引用類型的區別;

引用類型的值

當我們要使用引用類型的值的時候,我們new一個新的實體,但是該實體根本就沒有創建,而是直接與被引用值的地址建立聯繫,也就是說,該創建的新的實體的與被引用的值其實就是一個東西。當新創建的實體改變時,被引用的值也會改變。被引用的值被改變時,新創建的實體的值也會改變。

如下圖,堆中有一個引用類型的值名a,我們現在需要調用a的值,用b=new a,獲得了a的值,這時b並未創建一個新的實體,而是將調用地址直接指向了a,這樣當我們改變b的值的時候,a的值隨之改變。同理a的值改變時b的值也隨之改變。
在這裏插入圖片描述

值類型的值

值類型的值在執行b=new a 代碼的時候,會在堆裏面重新分出控件然後將a的值複製到新的內存空間中,這時候b指向的是新創建出來的空間b。b的值改變的時候,a的值不受影響。
在這裏插入圖片描述
ref修飾符,的作用是將值類型的參數修飾爲引用類型。
out修飾符的功能主要是返回方法中的參數。
out修飾符和ref修飾符的功能都是相同的,就是將參數作爲引用類型的值進行傳遞。
這樣我們即使沒有返回值,也相當於獲得了該方法的返回值。
out修飾符與ref修飾符的不同之處在於:
out修飾符修飾的參數在傳參的時候可以不用賦值,但是在方法執行完之前一定得賦值。
ref修飾符在傳值的時候需要參數有值;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章