- 締切済み
.Netのデータ型
ちょっと前の記事の確認です。ちなみに記事はこちらです。 http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_02/vbnet2_02_01.html .NetではVariant型が廃止されてObject型に移行になってます。 その上の記事に例えばLongはSystem.Long構造体のエイリアスと書いてあります。 この2つの出来事からいえることはLongやIntegerといったお馴染みのデータ型も 実はオブジェクトになったのではないかということです。 それならばVariant型がObject型に移行しても納得できます。 常日頃からこう思っているのですが、実際はどうなのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- khazad-lefty
- ベストアンサー率44% (296/668)
> 例えばsystem.longですが、object型の派生ならばsystem.object.longとなると思います。 え?派生クラスと名前空間はまったく別物ですよ。 名前空間は内部構造を無視して、外側から見た意味合いでグループ化したものです。 たとえば http://msdn.microsoft.com/ja-jp/library/system.io.streamreader.aspx の「継承階層」の部分を見るとわかるでしょうか? (とりあえず「別物」と理解しておけばいいです)
- khazad-lefty
- ベストアンサー率44% (296/668)
気になって調べてみたのですが No.1の回答内容で、基本的には間違いはなさそうです。 http://msdn.microsoft.com/ja-jp/library/aa691140%28VS.71%29.aspx で、 「何が言いたいかというと結局は値型もObject型からもともと派生はしていますが、CLRが値型をネイティブに処理ができるために参照型とは違う構造になっているということです。」 の言い方を変えると、 「.netの場合、値型もオブジェクトではあるんだけど、値型の場合、VBやC#などの言語から見た場合、C言語などのローレベル言語でいう「オブジェクトじゃない値」とほぼ同じ振る舞いになるので、参照型と扱いは違ってくるということ」 になります。 でもって、参照型のみを扱う変数型(VB6の「object型」)は存在しないようですね。
お礼
ご回答ありがとうございます。 二人の方の話をまとめると#1の方の内容は正しいらしいということですね。 この問題がこんなに根が深い?ものだとは認識していなくて、 サンデープログラマの私ではちょっと話についていけてない部分があります。 >.netの場合、値型もオブジェクトではあるんだけど これがこの質問で聞きたかったことだと思います。 値型というか、system.longはクラス(オブジェクト)でいいということでしょうか? >結局は値型もObject型からもともと派生はしていますが ええっとそうなのですか?ちょっと混乱しています。 例えばsystem.longですが、object型の派生ならばsystem.object.longとなると思います。 この辺の解説をお願いします。
- oboroxx
- ベストアンサー率40% (317/792)
うろ覚えなのですが、間違いがありましたら突っ込みをお願いします。 .Netでは大きく分けて参照型と値型があります。 参照型は、Object型から派生していて記憶している領域を指しているポインタになっています。 値型は、直接にはValueType型から派生していて、値そのものが記憶されいる領域です。 .NETのランタイムであるCLRは基本的な値型(つまり構造体を除く)をネイティブに認識するようになっています。 値型をObject型でキャストするとボクシングという処理が行われます。 つまり、値型を記憶している領域を参照するポインタが使われます。 この処理はオーバーヘッドが起こっている状態です。 逆に値型をObject型でキャストしたものを、元の値型でキャストするとアンボクシングというしょりが行われます。 これは、当初の値型の記憶構造になります。 で、何が言いたいかというと結局は値型もObject型からもともと派生はしていますが、CLRが値型をネイティブに処理ができるために参照型とは違う構造になっているということです。
お礼
何か非常に難しい言い回しをされているようですが、 LongやIntegerといったデータ型はボタンやフォームなどのように クラスを雛形にして作られたオブジェクトなのでしょうか? 私の質問の意図はここにあります。
お礼
回答どうもです。 これはまた虚をつかれて難解な(笑) まあ、私の知りたいことは結局聞けなかったようです。 なんか謎が謎をよんでいるのでこの辺で退散しますわ。