キャストとConvertを混乱してしまうよーという、そんなあなたのためのエントリです(^o^;
まず、順番にいきましょう。
文字列から数値に変換してくれるメソッドが.NETにはいっぱいあります。
.NET Frameworkで用意されているものでは、Integer[int]を例にすると・・・
VB |
C# |
Integer.Parse |
int.Parse |
Integer.TryParse |
int.TryParse |
これらは引数がStringである必要があります。
つまり、Stringから数値に変えてくれます。
(つまりStringが指定されていなければコンパイルエラーになります)
これに対してstring型以外のものも変換してくれるものがクラスライブラリにあります。
System.Convert.Int32()
System.Convert.Int64()
などそうですが、これは引数がObject型となっているので、どんなもんでも変換しようとしてくれます。
(ちなみにVB.NETのCIntも引数はObject型ですので、おそらくこのConvertと同じような動きになると思います)
もちろん、両者、変換できないものは(TryParseはともかく)Exceptionがthrowされることになります。
でもって、キャスト(Cast)ですが、これは明示的型変換とあるように、そのものを強制的に型変換しようという仕組みです。
つまり、ConvertやParseは文字から数値といった変換をしてくれるものでしたが、こいつは型を変換してしまうのです。
つまり、極端なことをいうと
Dim strValue As String = String.Empty
となっているものを
Dim intValue As Integer = DirectCast(strValue, Integer)
とやっても構文エラーにはなりません。 実行時エラーにはなるでしょうけど(^^;
つまり、値は変更せずに型だけを変換しようとします。
じゃ、本来どういったときに利用するか・・・ですがわかりやすいのはイベントハンドラの引数なんかがそうですね。
そう、ButtonClickとかのあれです。
ここに指定されている引数では
Private Sub ButtonClick(sender As Object, e As EventArg) Handles btnButton.Click
なんちゅうー感じで指定されて、そのsenderに実際にイベントの発信元となるコントロールのインスタンスが入っていたりします。
でもって、イベントハンドラは
Private Sub ButtonClick(sender As Object, e As EventArg) Handles btnButton1.Click, btnButton2.Click, btnButton3.Click
という感じで複数のイベントを1つのメソッドでハンドルすることができたりします。
この時に、どこから来たイベントを判断するのに
If sender Is btnButton1 Then
とIs演算子で判定すれば、発信元が特定できるようになります。つまり、どこから飛んできたか知る必要がある場合はIs演算子で判断する・・・といったこういう使い方をすると便利なんですね。
まま、もちろん他にも利用方法はいろいろあると思います。
というワケで、ざっくりでしたがキャストとConvertやCInt,Parseなどの違いがわかったでしょうか?(^^;;;;