2012-04-05 13 views
0

可能性の重複:その特定のオブジェクトを継承するクラスがあるとき、私は、このようなコードを書くことができています
How do ValueTypes derive from Object (ReferenceType) and still be ValueTypes?番号はどのようにC#で扱われていますか?

String s = 10.ToString(); 

のToString()は、来ます'Object'(ofcourseすべてのクラスはC#でObjectを継承します)。クラス10のオブジェクトも継承していますか?もしそうなら、どのように?

+0

これは、このサイトで何度も尋ねられている質問です。 [こちら](http://stackoverflow.com/questions/4729094/value-types-inherit-from-system-object-why)を見てみてください あなたが探しているものが見つかりますように。 – phadaphunk

+1

私は、これは前にリンクされた質問の重複に同意しません。 – jason

+0

@Jasonどのように? – NullUserException

答えて

4

「オブジェクト」クラスも継承していますか?もしそうなら、どのように?

リテラル10Int32のインスタンスとして、コンパイラによって解釈され、仕様ごとに、です。 Int32objectから継承します。したがって、10は、objectを継承する型のインスタンスです。したがって、ToStringというインスタンスメソッドがあります。

+0

はコンパイラによって解釈されます - >コードはまだコンパイルされていません – deen

+1

@Ala :ここでの「コンパイラ」とは、Visual Studioでは、コードの構文解析と意味解析をavその目的の1つはIntellisense機能です。ここで、「コンパイラ」は、「10」を「Int32」のリテラルインスタンスとして解釈する構文解析を実行し、その解析を使用して、Intellisenseに、「10」が「Int32」のインスタンスであり、 'Int32'が' object'から継承するという事実によってアクセス可能なものです。 – jason

+0

@Alaは、Jasonのコメントを要約しています。コンパイラは入力時に継続的に実行されます。しかし、「コンパイラによって解釈された」を削除すると、Jasonの答えは正しいままです。次のように考えてみてください。「文字通り「10」は、仕様に従って、Int32のインスタンスです。 – phoog

0

リテラルを含むすべてのプリミティブは.NETのオブジェクトであるため、.NETオブジェクトが持つすべてのメソッド(ToString()も含む)を継承します。 .NETオブジェクトへのプリミティブのマッピングについては、MSDNのドキュメントhttp://msdn.microsoft.com/en-us/library/ms228360(v=VS.80).aspxを参照してください。

+3

@mydogisbox:これはボクシングとはまったく関係ありません。 – jason

+0

@mydogisbox:MSDNドキュメントから直接:「すべてのプリミティブデータ型C#ではシステム名前空間のオブジェクトです "ラッパーを使用するJavaについては考えていませんか? –

+0

ああ、そうです。 – mydogisbox

関連する問題