2012-04-05 53 views
0

可能重複:
How do ValueTypes derive from Object (ReferenceType) and still be ValueTypes?如何在C#中處理數字?

我能寫這樣的代碼,

String s = 10.ToString(); 

的ToString()纔會來當特定對象是繼承類'Object'(當然,所有的類都繼承了c#中的Object)。它是否也繼承了類「對象」的10號。如果是這樣如何?

+0

這是一個在這個網站上多次提出的問題。 嘗試看[這裏](http://stackoverflow.com/questions/4729094/value-types-inherit-from-system-object-why) 希望你找到你想要的。 – phadaphunk 2012-04-05 18:56:56

+1

我不同意這是以前鏈接問題的重複。 – jason 2012-04-05 19:00:00

+0

@Jason怎麼這樣? – NullUserException 2012-04-05 19:05:18

回答

4

它是否也繼承了類「對象」。如果是這樣如何?

按照說明書,字面10被編譯器解釋爲Int32的實例。 Int32繼承自object。因此,10是從object繼承的類型的一個實例。因此,它有一個名爲ToString的實例方法。

+0

由編譯器解釋? - >我已經NT編譯的代碼還 – deen 2012-04-05 19:14:55

+1

@Ala。 :這裏的「編譯器」指的是在Visual Studio中有不斷運行的「進程」對你的代碼進行語法分析和語義分析其中之一是Intellisense功能。在這裏,「編譯器」執行將「10」解釋爲「Int32」的文字實例的語法分析,並且使用該分析向Intellisense提供信息,即「10」是「Int32」的實例以及當前可訪問哪些方法,包括那些可以通過'Int32'從'object'繼承的事實來訪問。 – jason 2012-04-05 19:19:25

+0

@Ala總結Jason的評論:編譯器在你輸入時不斷運行。但是,如果刪除「由編譯器解釋」,Jason的答案仍然正確。考慮:「根據規範,文字'10'是Int32的一個實例。」 – phoog 2012-04-05 20:45:58

0

很簡單,所有的基元,包括文字,都是.NET中的對象,所以繼承了.NET對象所有的方法(包括ToString())。有關將基元映射到.NET對象的信息,請參閱MSDN文檔:http://msdn.microsoft.com/en-us/library/ms228360(v=VS.80).aspx

+3

@mydogisbox:此無關拳擊絕對沒有 – jason 2012-04-05 18:59:25

+0

@mydogisbox:從MSDN文檔直接:「所有的原始數據類型在C#是在System命名空間中的物體「你確定你沒有想到Java,它使用包裝的 – 2012-04-05 19:01:12

+0

啊,對你是 – mydogisbox 2012-04-05 19:03:04