C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: イベントでsenderのキャストについて


(過去ログ 11 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■2524 / inTopicNo.1)  イベントでsenderのキャストについて
  
□投稿者/ iwaiwa (2回)-(2007/04/11(Wed) 14:29:38)

分類:[VB.NET (ASP.NET)] 

こんにちは。
vb.netで、非常に基本的な質問です。

下記のよくあるイベントのコードについてなのですが、1行目と2行目の明確な違いを知りたいです。
サンプル等では1行目のように書いてあるものが殆どですが、実際、2行目のように、
senderが明らかにDropDownListだと分かっている場合、キャストしなくても実行できます。

1行目のように書かなくてはいけない理由とかあるのでしょうか?
是非教えてください。宜しくお願いします。

Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Dim ddl As DropDownList = CType(sender, DropDownList)
'Dim ddl As DropDownList = sender
...
End Sub
引用返信 編集キー/
■2527 / inTopicNo.2)  Re[1]: イベントでsenderのキャストについて
□投稿者/ はつね (126回)-(2007/04/11(Wed) 15:14:53)
No2523 (iwaiwa さん) に返信
> senderは、DropDownListと明らかに分かっている場合、ctypeでキャストしなくても、
> 自動的にキャストされるのではないでしょうか?

Option StricがOnの場合は自動的にキャストされません。いわゆる暗黙の型変換の禁止です。
デフォルトではOffですが、ちゃんとプログラムしようと考えている人はOnにしています。

> 実際、コンパイルもエラーになりませんし、実行にも(見た目)影響はないようです。

暗黙の型変換の弊害は山ほど事例が存在します。よって、エラーにならないからといって、このままで良いとはいえません。

引用返信 編集キー/
■2528 / inTopicNo.3)  Re[1]: イベントでsenderのキャストについて
□投稿者/ じゃんぬねっと (403回)-(2007/04/11(Wed) 15:19:05)
じゃんぬねっと さんの Web サイト
弊害のひとつとして、型の不一致の発見が遅れます。

Option Strict On で型を明示化した場合は、コンパイル時に発見できますが、
暗黙の型変換を使用すると実行時まで発見が遅れてしまいます。

型の検証を前もってやっておけば同じなのですが、それをするくらいなら、Option Strict On にするでしょう。
あとは意図しない遅延バインディングも防ぐことができます。
引用返信 編集キー/
■2530 / inTopicNo.4)  Re[1]: イベントでsenderのキャストについて
□投稿者/ よねKEN (32回)-(2007/04/11(Wed) 15:48:31)
よねKEN さんの Web サイト
2007/04/11(Wed) 15:56:43 編集(投稿者)

本題は他の方の回答にあるとおりなので、それ以外で一言。

> Dim ddl As DropDownList = CType(sender, DropDownList)

CType関数よりもDirectCastキーワードの使用をお勧めしておきます。

理由:どちらもほとんど動作は同じですが、
参照型の型変換ではCType関数を使うメリットは特にありません。
DirectCastに比べてCType関数は裏でごにょごにょやっているので、
動作がごくごくわずかに遅いです。(気にするほどでもないっちゃないのですが)

補足:私はこういう場合はDirectCastを使いますが、
性能の差による理由ではなく、CTypeとDirectCastの本質的な役割の差が理由です。

CType、DirectCast、ついでにTryCastの違いは以下のTryCastのヘルプに説明があります。
http://msdn2.microsoft.com/ja-jp/library/zyy863x8(VS.80).aspx

※補足を追加しました。

引用返信 編集キー/
■2537 / inTopicNo.5)  Re[2]: イベントでsenderのキャストについて
□投稿者/ iwaiwa (4回)-(2007/04/11(Wed) 21:13:44)
ご回答、ありがとうございました。

暗黙の型変換の弊害というものには、未だ出くわしたことがないですが、
やはり、キャストは明示した方が賢明のようですね。

ところで、Option Strict On でやっている率というのは、どれほどの
ものなのでしょうか?

今でVB.NETは趣味でやっている感じなので、その辺のことには疎いのですが、
合わせて教えて頂けると嬉しいです。

宜しくお願いします。
引用返信 編集キー/
■2542 / inTopicNo.6)  Re[3]: イベントでsenderのキャストについて
□投稿者/ はつね (128回)-(2007/04/11(Wed) 23:27:59)
はつね さんの Web サイト
2007/04/11(Wed) 23:35:19 編集(投稿者)

No2537 (iwaiwa さん) に返信
> ところで、Option Strict On でやっている率というのは、どれほどの
> ものなのでしょうか?

Offでも気にしないという人に出会っていないだけかも知れませんが、私の周りでは、100%の割合でOption Strict Onです。


引用返信 編集キー/
■2546 / inTopicNo.7)  Re[4]: イベントでsenderのキャストについて
□投稿者/ Mr.T (24回)-(2007/04/12(Thu) 08:46:20)
Mr.Tです、こんにちは。

No2542 (はつね さん) に返信
> 2007/04/11(Wed) 23:35:19 編集(投稿者)
>
> ■No2537 (iwaiwa さん) に返信
>>ところで、Option Strict On でやっている率というのは、どれほどの
>>ものなのでしょうか?
>
> Offでも気にしないという人に出会っていないだけかも知れませんが、私の周りでは、100%の割合でOption Strict Onです。

率というか、
「Option Strict Offの弊害を知ってたらOnは100%」
のような気がします。


引用返信 編集キー/
■2547 / inTopicNo.8)  Re[3]: イベントでsenderのキャストについて
□投稿者/ アクア (45回)-(2007/04/12(Thu) 09:04:41)
アクア さんの Web サイト
No2537 (iwaiwa さん) に返信
> ご回答、ありがとうございました。
>
> 暗黙の型変換の弊害というものには、未だ出くわしたことがないですが、
> やはり、キャストは明示した方が賢明のようですね。
>
> ところで、Option Strict On でやっている率というのは、どれほどの
> ものなのでしょうか?
>
> 今でVB.NETは趣味でやっている感じなので、その辺のことには疎いのですが、
> 合わせて教えて頂けると嬉しいです。
>
> 宜しくお願いします。


アクアと申します。よろしくお願いいたします。

私は完全に趣味でVisualBasic 2005 を使ってますが、確実にOption Strict On です。
こっちの方が、自身の将来的な知識の習得を踏まえても、断然良いと方法だと思っています。
引用返信 編集キー/
■2549 / inTopicNo.9)  Re[3]: イベントでsenderのキャストについて
□投稿者/ 特攻隊長まるるう (49回)-(2007/04/12(Thu) 09:37:30)
No2537 (iwaiwa さん) に返信
Option Strict On に関して[VB.NET2003]で規定のプロジェクトの設定を変更するには
[ツール]-[オプション]ダイアログの[プロジェクト]-[Visual Basic の規定値]を
変更しますが、これを設定してるので新規プロジェクトでは100%です。
引用返信 編集キー/
■2586 / inTopicNo.10)  Re[4]: イベントでsenderのキャストについて
□投稿者/ iwaiwa (5回)-(2007/04/12(Thu) 14:42:32)
皆さん、ご回答ありがとうございました。
私もOnでやってみることにします。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -