2011-10-24 18 views
0

値の型がオブジェクトの場合(ValueTypeが実際にObjectから継承しているのを見てきました)、どうしてオブジェクトとして振る舞いませんか? nullにすることはできないため、参照を持たないように見え、ボックス化/ボックス化解除する必要があります。 paramsとして渡されると、プリミティブのように動作しますが、メソッドを呼び出すことができるので、参照型としても動作するようです。私は彼らが通常スタックに割り当てられていることを読んで、値の型のように見えるようにします。そして、限りボクシング行く、私はint型とIntegerのJavaの等価物、Int32の構造体が表示されないので、Int32がボックス化されている場合、それは何に入っていますか?.NETのプリミティブは、値の世界の半分、参照の世界の半分のように見えます

要するに、誰かが1つの世界で半分、他の世界で半分に立っているように思われる場合、私は確かにそれを感謝するでしょう。

+0

あなたの期待を再調整する必要があります。あなたが何かがオブジェクトであるなら、それはヌル可能でなければならないと信じているようです。これがあなたの問題です。オブジェクトにnull値を設定する必要はありません。 –

+0

なぜJavaのintとIntegerに相当するはずだと思いますか?これはおそらく、Java言語の最も愚かな設計決定の1つです! –

答えて

1

.NETは、それはのデザインに影響を与えエッフェル塔でuniform access principle、上に読んで(情報を操作することで統一されたインタフェースを持っていることは有益ですので、あなたがオブジェクトとして値型を扱うことができますC#)。 5.ToString()Int32.ToString(5)よりも意味があります。なぜなら、それが構文的な砂糖であったとしても、OOPのパラダイムと一致しているからです。 C#2.0とそれ以上で

値型の変数は、次の構文を使用して、NULL値可能に宣言することができます:値の種類の作業がhttp://msdn.microsoft.com/en-us/library/system.valuetype%28v=VS.85%29.aspxで利用できる方法について

int? myInt; 

詳細:

それのケースでは値型がオブジェクトのように振る舞うようにする必要があり、参照オブジェクトのように値型を見せるようにするラッパーがヒープに割り当てられ、値型の値がそのオブジェクトにコピーされます。ラッパーにはマークが付けられているため、システムには値タイプが含まれています。