我從this post瞭解到C#中的值類型不是對象。也就是說,它們不從System.Object繼承。C#:可爲空類型(int?)對象?
假設我的邏輯持有到這一點,是可空類型,如int ?,對象。他們是否繼承了Object?
如果是這樣,它們是否受到與其他對象相同的規則和約束,還是有特殊的規則來管理它們的行爲?
就像參考一樣,這個問題來自對空合併操作符的工作的調查。
我從this post瞭解到C#中的值類型不是對象。也就是說,它們不從System.Object繼承。C#:可爲空類型(int?)對象?
假設我的邏輯持有到這一點,是可空類型,如int ?,對象。他們是否繼承了Object?
如果是這樣,它們是否受到與其他對象相同的規則和約束,還是有特殊的規則來管理它們的行爲?
就像參考一樣,這個問題來自對空合併操作符的工作的調查。
不正確 - 值類型是對象,但它們的行爲與引用類型不同 - 它們是按值傳遞的,而不是按引用傳遞。因此,Nullable<T>
(這是什麼T?
是)是一個結構,所以繼承自System.ValueType和System.Object。在C#編譯器中有Magic,它使得可爲空的類型的行爲與對null和??的引用類型的行爲相同,但它們總是具有按值複製的語義。
你問「從System.Object繼承」還是「引用類型」?
值類型從System.Object繼承,但它們不是引用類型。
可爲空的類型也是值類型,所以它們也不是引用類型,但它們繼承自System.Object。
請注意,您作爲程序員可以聲明的內容和系統提供的內容有所不同。
值類型做從System.Object繼承,但您不能自己聲明值類型從任何東西下降。
值類型從System.ValueType下降,而System.ValueType又從System.Object下降。
從技術上講,所有值類型都是從System.Object中下降的。
可空類型是structs(根據coop),不能從* anything *繼承。 – RCIX 2009-12-04 23:30:07
技術上他們這樣做。檢查http://stackoverflow.com/questions/1793357/do-value-types-integer-decimal-boolean-etc-inherit-from-object – 2009-12-04 23:55:44
另請參閱http://blogs.msdn。com/ericlippert/archive/2009/08/06/not-everything-derived from-object.aspx – 2009-12-04 23:58:40
一切都是對象,值類型只是結構而非類。
實際上,指針類型_aren't_對象 - 請參閱http://blogs.msdn.com/ericlippert/archive/2009/08/06/不,一切-派生從 - object.aspx – thecoop 2009-12-04 23:00:33
嘿,你應該閱讀鏈接的問題和答案更難。值類型也是從'System.Object'派生的,只是間接的;否則他們不會有像'object.GetHashCode'和'object.ToString'這樣的方法。 – mquander 2009-12-04 22:54:37
關於'Nullable'的問題到底是什麼?他們有什麼問題? –
thecoop
2009-12-04 22:55:38