[英]Is value type boxing when it is a field of reference type?
有代碼:
struct A
{
int b;
}
class B
{
A a;
int b;
}
問題是:
我真的不明白它:(
使用Google我發現了這個 :
拳擊和拆箱是C#類型系統中的一個基本概念。 使用Boxing和unboxing,可以通過允許將value-type的任何值轉換為類型對象和從類型對象轉換來在值類型和引用類型之間進行鏈接。 裝箱和拆箱可以實現類型系統的統一視圖,其中任何類型的值最終都可以被視為對象。 將值類型轉換為引用類型稱為Boxing。 拆箱是一項明確的操作 。
拳擊正在將值類型轉換為引用,並且不在您的代碼中。 所以回答你的“b-boxed”問題是“不”。
通過引用傳遞值類型也不是裝箱。
void SomeFunction(ref int a)
a未加框。
int? value
int? value
Nullable值類型也沒有裝箱。
object my_box = my_integer
my_value是my_integer的盒裝版本
類中包含的值類型不是盒裝的(如果是這種情況,它何時會是值類型?)
, all of the fields--public and private--of that type. 的結構類型的存儲位置(變量,參數,或場)成立時, ,所有字段-公共和私人-該類型的。 如果存儲位置作為自動變量或參數保存在堆棧上,則其所有字段都是相同的。 . 如果存儲位置存在於堆對象中,則其字段將位於 。
拳擊在內部通過為每個值類型定義具有相同名稱和成員的類類型來工作。 當為需要類類型的代碼提供值類型值時,系統會生成同名類類型的新實例,並將所有字段(public和private)從value-type值復制到新對象實例。 盡管C#規范將盒裝實例描述為值類型,但其行為和內部工作方式將是類類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.