- - PR -
VBの日付型と暗黙の型変換
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-04-10 20:52
こんばんは。
参照元記事で、VB6.0とVB.NETでの日付型の違いを解説されていますが、 日付型の違いの説明で"2002/4/1"を日付型に代入した後でDebug.Printなど したときの時刻部の表示の違いは、日付型の内部データ構造の違いによるものと 解説されています。 この時刻部の表示の違いは、日付型から文字列型への暗黙の型変換による 動作の違いを現すものではないのでしょうか。 些細なことですが、言語の解説記事だったためコメントします。 | ||||||||||||||||
|
投稿日時: 2002-04-10 22:36
より正確には、System.DateTime型のToString()の実装が、現在のロケールにおける日付形式情報を取得して、それで整形した文字列を表示するようになっているからですね。暗黙の型変換というとop_Implicitを想像してしまうので、僭越ながら。 VB6のDateがデフォルトで日付部しか表示しない理由は内部動作がわからないのでわかりませんが。 でもいずれにしろリックスさんがおっしゃるように、内部のデータ構造(VB6はDoubleで.NET FrameworkではSystem.Int64)の違いはこの場合は関係ないと私も思います。 | ||||||||||||||||
|
投稿日時: 2002-04-11 13:37
まずはごめんなさい。
間抜けなもので、時々、N-BASIC時代の感覚に迷い込みます。 記事の解説は正しいものではありません。 正確には、以下のようになります。
_________________ | ||||||||||||||||
|
投稿日時: 2002-04-11 13:44
書式を指定することもできますが、DateTimeにはToXxxStringというのがいくつかありますので、この場合はDateTime.ToShortDateStringとかを使うという手もあります。内部でやっていることは結局書式指定でしょうけど。 | ||||||||||||||||
|
投稿日時: 2002-04-11 13:56
私は、autumnさんが書いている
引用:プロフェッショナルVB.NETプログラミング 第2回 データ型の処理 (2002/04/04) より -------------------------------------------------------------------------------- DateTimeクラスは、日付と時刻の双方を保持する機能を持つため、そのまま表示させると日付と時刻の双方を表示する。 -------------------------------------------------------------------------------- という説明も間違いではないと思います。 Dateクラスなら存在しない情報、つまり時刻情報を表示する事は有り得ないと思うからです。 ただ、全体として、完全では無かったとは思いますけど。 それより、私はこのVB.NETの例を見てて、とても違和感を感じました。 construction処理と代入処理の違いを殆ど意識していないという印象を受けます。 これらの違いは、C++から入った人は、早い段階で思い知る内容だと思います。 construction処理は、クラスをインスタンス化する上で、最も重要な処理です。 VB.NETを説明する場合に於いても、もっと意識させるべきだと感じました。 | ||||||||||||||||
|
投稿日時: 2002-04-11 14:09
VB6のDate型には時刻情報も入っています。ですが、VB6開発チームが デフォルトでそれを表示しないという決断をしただけだと思います。
.NET FrameworkではSystem.DateTimeは値型です。ですから、C++で
と書くのと、.NET Frameworkで
と書くのは意味的に同じです。値型は「コンストラクション」する必要はありません。値ですから。 [ メッセージ編集済み 編集者: NothingBut.NETFX 編集日時 2002-04-11 14:09 ] | ||||||||||||||||
|
投稿日時: 2002-04-11 14:43
引用:NothingBut.NETFXさんの書き込み (2002/04/04) より
-------------------------------------------------------------------------------- VB6のDateクラスには時刻情報も入っています。ですが、VB6開発チームが デフォルトでそれを表示しないという決断をしただけだと思います。 -------------------------------------------------------------------------------- VB6のDateクラスには時刻情報も入っているんですか。 実際に時刻も設定出来るのに、Dateクラスなんですか? VB6を知らずに、名前だけから判断しました。 済みません。 引用:NothingBut.NETFXさんの書き込み (2002/04/04) より -------------------------------------------------------------------------------- と書くのは意味的に同じです。値型は「コンストラクション」する必要はありません。値ですから。 -------------------------------------------------------------------------------- これに関しては、少し違います。 私が言いたいのは、 construction処理と代入処理が基本的に違う処理である。 メモリのアサインとその内容を決定する事は、本来レベルの異なる内容であるという事です。 これを、ハッキリと意識させるのは、重要ではないでしょうか。 値型か参照型かに関係なくこの事はとても重要だと私は思っています。 値型でも、コンストラクション処理はある訳ですから。 それから、少し言葉を変えて表現すれば、 プログラムに於いて、重要なのは、 「プログラマの意志をコンパイラに伝えることの重要性」 という事でしょうか? VB6から入ってくる場合、特に意識して貰う必要があると思いました。 | ||||||||||||||||
|
投稿日時: 2002-04-11 15:03
すみません、私は、objectさんは川俣さんの記事の中の、次のコードのことについておっしゃっていると仮定しています(これが違うようですと話がずれてしまうのですが)。このコードはVB6とVB.NETの2つの例で共通です。
このコードは、メモリのアサインとその内容の決定をきっちりわけていますよね?これのどこがいけないとおっしゃっているのかがわからないのです。
値型には、C++的な意味での「コンストラクション」処理はありません。コンストラクタまがいのものが定義できるということと、C++的な意味での「構築処理」がされるということとは違います。
このお言葉自体には同感ですが、それでは川俣さんのコード例(またはVB6/VB.NET一般)のどこが「プログラマの意志を必ずしもコンパイラに伝えきれていない」点なのでしょうか? |
1|2|3|4
次のページへ»