有點學術問題,但是:價值類型如何像Int實際上工作?Value類型如何在.net中工作?
我在mscorlib上使用了Reflector來了解System.Int32是如何實現的,它只是一個從System.ValueType繼承的Struct。我正在尋找一個位數組中的值來保存值,但我只找到一個聲明爲int的字段 - 這意味着它是一個循環引用?
我的意思是,我可以寫「int i = 14;」,但數字14需要以某種方式存儲在某處,但我無法找到「32位數組」或指針或其他東西。
這是編譯器所做的一些神奇的事情嗎?這些神奇的類型是規範的一部分嗎? (類似於System.Attribute或System.Exception如何是「特殊」類型)
編輯:如果我聲明我自己的結構,我向它添加字段。這些字段是內置類型的,例如int。所以CLR知道我擁有一個int。但是它是如何知道int是32位的?這只是說明規範指定了某些基本類型,因此使它們變得「神奇」,還是存在技術機制?假設的例子:如果我想要聲明一個Int36,這是一個36位的整數,我可以創建一個類似於Int32的,正如,除了4個額外的位之外,通過指定「好吧,擱置36比特「,還是內置的原語設置石頭,我不得不以某種方式解決這個問題(即通過使用Int64和代碼,只設置最後36位)?
正如所說,所有非常學術和假設的,但我總是想知道這一點。
其實很好的問題,我想知道自己的魔法是什麼。 – Pierreten
我也是,我期待這個問題是關於價值類型如何工作,即堆棧和堆分配等,但我對此自我感到好奇。 – Davy8
重新編輯:據我所知,如果你想創建一個Int36,你將不得不以某種方式在C#或IL中指定它,這將迫使你使用Int32 + Int8或Int64以及最後的28個位被忽略或者其他。將Int36添加到原始底層虛擬機並讓它理解位級表示的唯一方法是實現您自己的CLR a la Mono或Rotor。 – itowlson