如果引擎蓋下得到的,在C#中值類型由編譯器/ CLR處理非常特別。但CLR內部的類型更加特殊。這裏是我的意思是:是否有可能在C#中創建System.Int32?
int a = 5;
int b = 10;
int с = a + b;
a.CompareTo(b);
你可以用你的鼠標int
在Visual Studio中徘徊,看到實際上它是System.Int32
結構。沒關係。現在,你可以抓住ILDASM和考慮什麼System.Int32
是:翻開它與int32
類型的一個領域是非常簡單的結構(這是int32
內部CLR)並沒有重載運營商的補充。
那麼,如何int с = a + b
的作品呢?我再一次抓住ILDasm並觀察IL。原來,有在IL代碼中沒有System.Int32
:編譯器自動理解,它應該與int32
替換它。 IL指令add
適用於棧上的int32
。 CLR允許我在int32
上調用System.Int32
的實例方法。對我來說看起來像是一些黑魔法。
所以,在這裏不用純理論性的問題:似乎System.Int32
的類型是像任何其他的,可以在C#中創建不知何故?如果可以,你可以做任何有用的事情(實際int32
字段是私人的)?
編輯:好吧,讓它多一點明確:這個問題有什麼關於int
是別名System.Int32
。可以舉一個例子,將int
替換爲System.Int32
,並跳過示例後的第一段。真正的問題是有可能在您的IL代碼中有valuetype [mscorlib]System.Int32 a
而不僅僅是int32 a
。
'int a = new int();'與System.Int32 a = new System.Int32();'相同。這只是語法糖。兩者都將在內部表示爲'int32'。儘管在CLR中有一些「神奇」處理的結構,但它比其他一些Java語言更好,在這些語言中,獲得所有額外功能需要裝箱/拆箱。 –