プロが教えるわが家の防犯対策術!

初めまして。

現在、vb.netを使用して開発しているのですが、
DirectCastやCtypeなど、どの場合にどの関数を使うべきかがよくわかりません、

よろしければ、以下の点について、教えていただけませんか?

教えて欲しいこと
・DirectCastとCtypeの違いについて
・CstrとToStringとconvertの違いについて
・上記の2つについて、どの場合に使い分ければよいかについて

上記のことが纏まっているサイトがあれば、そのサイトも紹介してほしいです。

自分なりに調べた結果
・継承関係にあるObject型に変換するならDirectCastがよい。
・継承関係にない型変換の場合は、Ctypeがよい。
・Cstr、ToString、convertは、nullやNothingをどう扱うかによって使い分ければよい

以上、よろしくお願い致します。

A 回答 (1件)

>・継承関係にあるObject型に変換するならDirectCastがよい。


「継承関係にあるObject型に変換」ってどういう意味ですか?
全てのクラスはObject型を継承しています。(だからこそObject型の
変数を用意すれば型変換なしに何でも代入できてしまうわけですが。)
ほぼ意味の無い表現ですよこれ。
「オブジェクトに変換」という意味で使ったんでしょうか?
「Object型」というものが定義されている以上、意味が変わってしまいますよ。

>・継承関係にない型変換の場合は、Ctypeがよい。
DirectCast の方がパフォーマンスに優れているのだから、DirectCast
が使えるなら使った方がよいです。「良い悪い」では無く「出来る出来ない」
のレベルで違いがあるので、この理解の仕方では本末転倒です。
DirectCast の使い方が理解できない初心者向けの一時しのぎの解釈として、
CTypeで統一しておくというのはあると思います。
可読性とか、統一する事で検索し易くして保守性を上げる人もいるかもしれ
ません。少数派だと思いますが。

>・Cstr、ToString、convertは、nullやNothingをどう扱うかによって使い分ければよい
対象の値がnullやNothingの場合にエラーになるならないの違いはありますが、
エラートラップすればいいだけなので、どの関数でも同等のプログラムは
書けます。nullやNothingの処理が関数の仕様どおりなら使った方がスッキリ
書けるでしょうが、nullやNothingが入ってきてる時点で問題がある場合が
多いので、Convert.ToStringで変換してしまうのは、そういった仕様が明確に
なっている場合のみに限定する事をお勧めします。
あとは、コーディングルールを決めているならそれに従えばいいですし、
オブジェクト指向的な概念を重要視すれば、ToStringはオブジェクトが
主体。Convert.~は変換が主体。CStrは手続き型なのでオブジェクト指向
ではないと言えます。
オブジェクトを文字列に変換する場合に、内部的には ToString が呼ばれて
いる場面が多々あります。ToString を使えるのが統一的な処理を書ける場合が
多いです。オーバーライドしてリスト系のコントロールに表示される文字列を
カスタマイズするテクニックなどがあります。
CStrはVB6世代のコーディングなので、VB.NETの概念的には使わない方がいいの
ですが、VB用に最適化されているのでパフォーマンスが向上することがあります。
私は使いません。

そもそも型変換において重要な点には、拡大変換と縮小変換があり、
VBは勝手に暗黙的な型変換を試みるので、変換元から変換先へ、どのような
変換規則が適用されるかを知っていないと判断なんてできませんが。

私の結論としては、勉強する気が無いなら CType と ToString 使っとけです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!