AQUA's .NET 奮闘記

Hobby Programmer の成長記録

目次

ニュース

  • わんくま同盟
    わんくま同盟
  • わんくま掲示板
    C# と VB.NET の質問掲示板
スカウター : AQUA's .NET 奮闘記

日記カテゴリ

記事カテゴリ

書庫

Blog 利用状況

わんくま同盟 AWARD

わんくま同盟 影

明示的型変換(キャスト)

非常に中途半端なエントリになりそうですが…

Visual Basic 2005 でいくつかの入門書を読んでいて違和感を感じるのが( 明示的な )型変換です。

※ 参考までに、既にご存知とは思いますが、Visual Basic の型変換を挙げておきます。


型変換キーワード 変換後のデータ型 変換できる式のデータ型
CBool Boolean すべての数値型 (バイト型 (Byte) および列挙型を含む)、文字列型 (String)、オブジェクト型 (Object)
CByte Byte すべての数値型、すべての列挙型、ブール型 (Boolean)、文字列型 (String)、オブジェクト型 (Object)
CChar Char 文字列型 (String)、オブジェクト型 (Object)
CDate Date 文字列型 (String)、オブジェクト型 (Object)
CDbl Double すべての数値型 (バイト型 (Byte) および列挙型を含む)、ブール型 (Boolean)、文字列型 (String)、オブジェクト型 (Object)
CDec Decimal すべての数値型 (バイト型 (Byte) および列挙型を含む)、ブール型 (Boolean)、文字列型 (String)、オブジェクト型 (Object)
CInt Integer すべての数値型 (バイト型 (Byte) および列挙型を含む)、ブール型 (Boolean)、文字列型 (String)、オブジェクト型 (Object)
CLng Long すべての数値型 (バイト型 (Byte) および列挙型を含む)、ブール型 (Boolean)、文字列型 (String)、オブジェクト型 (Object)
CObj Object すべての型
CShort Short すべての数値型 (バイト型 (Byte) および列挙型を含む)、ブール型 (Boolean)、文字列型 (String)、オブジェクト型 (Object)
CSng Single すべての数値型 (バイト型 (Byte) および列挙型を含む)、ブール型 (Boolean)、文字列型 (String)、オブジェクト型 (Object)
CStr String すべての数値型 (バイト型 (Byte) を含む)、ブール型 (Boolean)、char 型 (Char)、char 型の配列 (Char())、日付型 (Date)、オブジェクト型 (Object)
CType コンマ (,) の後に指定された型 基本型 (基本型の配列を含む) に変換する場合は、対応する変換キーワードで使用できるのと同じ型。

複合型に変換する場合は、それが実装するインターフェイス、およびそれが継承するクラス。


上記の関数の中ではCTypeを使うことが多いでしょうが、業務として使用する頻度としてはむしろ Directcast キーワードや TryCast キーワードでしょう。
( TryCast は例外をスローせず Nothing を返す )

ですが、TryCast はともかくDirectcast の利用や説明が他の型変換に比べて少ないことに大いに違和感を感じます。

 

さて、そんな私はというと、実は型変換にSystem.Convert クラスを多用してます。^^;

これは、いずれC#を本格的に勉強するために今から互換性のあるものを使っておきたいと思っての事なのですが、これって皆さんからみて違和感あります?

 

# 追加: 致命的違和感があったみたいです^^; ひろえむさんありがとうございます。 勉強しときます。 

投稿日時 : 2007年3月7日 21:07

Feedback

# re: 明示的型変換(キャスト) 2007/03/07 21:47 ひろえむ

んー、System.ConvertのメソッドとCastは別物ですよー(^^;;;

# re: 明示的型変換(キャスト) 2007/03/07 22:03 アクア

うん、まぁ、あれだ!
致命的勘違いもコミだw

ご指摘ありがとうございます。m(_ _)m
勉強しまふ。

# re: 明示的型変換(キャスト) 2007/03/07 23:15 じゃんぬねっと

Convert は文字通りコンバート != Cast
MSIL で見てコストも意識すべきっすよ。

変換という意味なら、Parse 系のメソッドもどぞ。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31835&forum=7

# re: 明示的型変換(キャスト) 2007/03/07 23:29 中博俊

>MSIL で見てコストも意識すべきっすよ。
アクアさんにそこまで求めるのは違うと思おうなぁ。

# re: 明示的型変換(キャスト) 2007/03/07 23:34 アクア

MSILって一回試したっきりです。
既にやり方すら忘れていますので、書籍ひっくり返して試してみます。
# この場合のコストってなんじゃろか? >_<

Parse系もConvertと同じぐらい使います。
# ただこちらも内部的に違いがあるのでしょうね。
# TryParseも数回使った程度だったりするし…


直感的に型変換=Castとしてしまう意識と知識の欠如がダメダメだったりする訳ですね。
失敗から学びました。

# re: 明示的型変換(キャスト) 2007/03/07 23:50 アクア

■ 中博俊さん
>アクアさんにそこまで求めるのは違うと思おうなぁ。
よくご存知で…^^;
まぁ、実際に業務として深く携わっているわけでもないし、知識や経験も足りませんが、皆さんに近づくために努力してみます。

趣味レベルでも頑張ってるんだぞぉ~!みたいな。^^
歩む速度はいまいちですがね…





皆さんのコメントが自分の糧になるので非常に助かります。(もちろん本音)
今後も色々とダメだしをしてください。

# re: 明示的型変換(キャスト) 2007/03/08 1:11 επιστημη

> この場合のコストってなんじゃろか?

時間計算量 and/or 空間計算量 でしょう。
つまり "どんくさい" もしくは "大飯喰らい"

# re: 明示的型変換(キャスト) 2007/03/08 9:22 NAO

私はC(C++)から入っているので
キャストする時は明示的に書きますね~

暗黙の型変換は絶対に使いません(^_^;

# re: 明示的型変換(キャスト) 2007/03/08 10:39 とりこびと

さいきんやっとこさOption Strict Off で書いてから On にしても警告が出ないようになってきたとりこびとがきましたよ。(遠い目)

趣味で書くときはCxxxなキーワードも書きますが、最近はあんまり使った記憶がないです。

# 趣味レベルで仕事してるのは内緒。orz

タイトル  
名前  
Url
コメント