要將值類型轉換爲System.Object
- 本身對我來說似乎是「錯誤的」(因爲強制轉換應該將該值轉換爲另一種類型(所以將Int32轉換爲對象應該是一個數據有損的行爲,因爲Object沒有自己的實例狀態)或將接口指針轉換爲父級(這不會影響被指向的對象的狀態,並且是編譯期關注的問題)。在CLR中將值複製到堆並在同一時間丟失接口信息的情況下,當您只想真正執行第一個任務時(將值複製到堆或至少獲取對該堆的引用) ).NET中的強類型裝箱值
Java用強類型Integer
和解決了這個問題。爲什麼.NET沒有這個?
我有我自己的實用程序源代碼集合,我喜歡在其他項目中包含它們,並且它們包含自己的強類型盒裝類(如BoxedInt32)的實現,它們覆蓋隱式和顯式轉換運算符,除了不必實際強制轉換爲對象(從而保留類型數據)之外,與向Object轉換的方式相同。所以我可以這樣做:
private BoxedInt32 _reference;
public Int32 GetValue{ return _reference; }
那麼爲什麼.NET在四個主要版本之後仍然沒有強類型的盒裝類型呢?
最大的使用案例拳擊是集合和泛型解決了很多這一點。你能否詳細說明爲什麼你需要這些強類型的盒裝類型? – akton
@akton當值被一個程序的多個組件共享但是存在於靜態類的狀態之外時,那麼每個程序組件需要一個對保持對象的引用,當你需要的只是對該值的引用時,它可能會混淆代碼。當所述程序組件不需要將該引用存儲在其自己的狀態中時,'ref'參數只能解決這個問題。 – Dai
你認爲BoxedInt32與只是一個物體會有什麼不同? –