值型別和引用型別

2022-03-16 08:15:23 字數 711 閱讀 5216

在.net新手小組中看到這篇文章感覺很不錯,就把它引用了過來。

問     題

值  類  型

引 用 類 型

這個型別分配在**?

分配在棧上

分配在託管堆上

變數是怎麼表示的?

值型別變數是區域性複製

引用型別變數指向被分配得例項所佔的記憶體

基型別是什麼?

必須繼承自system.valuetype

可以繼承自除了system.valuetype以外的任何型別,只要那個型別不是sealed的

這個型別能作為其他型別的基類嗎?

不能。值型別是密封的,不能被繼承

是的。如果這個型別不是密封的,它可以作為其他型別的基類

預設的引數傳遞是什麼?

變數是按值傳遞的(也就是,乙個變數的副本被傳入被呼叫的函式)

變數是按引用傳遞(例如,變數的位址傳入被呼叫的函式)

這個型別能重寫system.object.finalize()嗎?

不能。值型別不好放在堆上,因此不需要被終結。

可以間接地重寫

我可以為這個型別定義建構函式嗎?

是的,但是預設的建構函式被保留(也就是自定義建構函式必須全部帶有引數)

當然!這個型別的變數什麼時候消亡?

當它們越出定義的作用域時。

當託管堆被垃圾**時。

用一張**就能把兩個區別給講明白了,確實不錯

引用型別和值型別

c 是一種型別安全的語言。每乙個變數都要求定義為乙個特定的型別,並且要求儲存在變數中的值只能是這種型別的值。變數既能儲存值型別,也可以儲存引用型別,還可以是指標。這一課將講述前兩種型別,關於指標的討論我們將在下一課中進行。下面是關於值型別和引用型別不同點的概論 如果乙個變數v儲存的是值型別,則它直接...

引用型別和值型別

c 中值型別和引用型別作為方法引數傳遞的時候其實都可以說是 值 的傳遞,只不過這裡的 值 指代的東西有所區別。當方法的引數為值型別時,方法傳遞的是值本身的值。當方法的引數為引用型別時,方法傳遞的則是應用型別的引用的位址,也就是引用型別位址在棧上的值。舉個引用型別作為引數傳遞的例子 static vo...

值型別和引用型別

為了更好地說明兩種型別之間的區別,借用如下的 來說明 值型別引用型別 記憶體分配地點 分配在棧中 分配在堆中 效率效率高,不需要位址轉換 效率低,需要進行位址轉換 記憶體 使用完後,立即 使用完後,不是立即 等待gc 賦值操作 進行複製,建立乙個同值新物件 只是對原有物件的引用 函式引數與返回值 是...