DOBON.NET DOBON.NETプログラミング掲示板過去ログ

質問 [ ]付きの変数、条件句の 「and」 と 「=」

環境/言語:[OS : Windows XP Home Edition / 言語 : Visual Basic 2005 / .NET Framework : 2.0]
分類:[.NET]

2006/03/21(Tue) 17:00:40 編集(投稿者)

【解決したい問題】

こんにちは。
.NET歴 2年半 ブランク2年の者です。
以前、こちらのサイトで .NET の勉強を始め、数回投稿させて
頂いたことがあります。今回、久しぶりに .NET に触れ、また
記事を読ませて頂きました。相変わらず初歩的な質問ですみません。

質問

・.NET Tips で解説されているソースコード(※)内に、[source]という角括弧[ ]付きの変数があるのですが、この角括弧[ ] にはどういった意味があるのでしょうか?

・また、同じ記事の If 文の条件句に以下のようなコードがあるのですが、
  If (e.KeyState And 8) = 8 And _
    (e.AllowedEffect And DragDropEffects.Copy) = _
    DragDropEffects.Copy Then ...
 これは以下のような条件句にすると何か不具合があるのでしょうか?
  If (e.KeyState = 8) And _
    (e.AllowedEffect = DragDropEffects.Copy) Then ...

 前者のように記述する理由を教えて頂きたく質問させて頂きました。

(※ .NET Tips > コントロール -「TreeViewのノードをDrag&Dropにより移動、コピーできるようにする」)

【追加事項】

Visual Basic 2005 を利用しています。
ここで回答してもらいお世話になったので、私なりに判る範囲で回答したいと思います。
(はじめての回答なのでおかしい部分があったら指摘してください。)

> ・.NET Tips で解説されているソースコード(※)内に、[source]という角括弧[ ]付きの変数があるのですが、
>この角括弧[ ] にはどういった意味があるのでしょうか?

.NET上(言語)で予約されている単語を変数名として使用する場合に[ ]を付けて定義するのだと思います。


> ・また、同じ記事の If 文の条件句に以下のようなコードがあるのですが、
>   If (e.KeyState And 8) = 8 And _
>     (e.AllowedEffect And DragDropEffects.Copy) = _
>     DragDropEffects.Copy Then ...
>  これは以下のような条件句にすると何か不具合があるのでしょうか?
>   If (e.KeyState = 8) And _
>     (e.AllowedEffect = DragDropEffects.Copy) Then ...

AllowedEffectプロパティにはビット演算を使用して格納できる値が入っているということですので、上記の
ような記述になっているものと思われます。
例えば、e.AllowedEffect = DragDropEffects.Copy(定数値は2) としてしまうと、e.AllowedEffect = 2
の場合しか処理できません。組み合わせされたe.AllowedEffect = 7 とかの値の場合も処理できるようにだと
思います。
すいません、早速やらかしてしまいました。
DragDropEffects.Copyの定数値は2ではなく、1でした。
ごめんなさい・・・
■No14925に返信(しろひとさんの記事)
> ・.NET Tips で解説されているソースコード(※)内に、[source]という角括弧[ ]付きの変数があるのですが、
> この角括弧[ ] にはどういった意味があるのでしょうか?

とりあえず、過去ログを検索するとヒットします。
http://dobon.net/vb/bbs/log3-17/9856.html

C# のクラス ライブラリで Dim 型なんていじわるな型を宣言された時、
VB からも利用できるようにするための機構でしょう。

実際に使う場面は、Assembly、Enum くらいしかありません。(私は)

> これは以下のような条件句にすると何か不具合があるのでしょうか?
> If (e.KeyState = 8) And (e.AllowedEffect = DragDropEffects.Copy) Then ...

これだと、他の組み合わせが読み取れません。
DragDropEffects 列挙体は FlagsAttribute 属性を持っていますので、
組み合わされた値が格納されることは想定すべきです。

関係ないですが、And は AndAlso の方が素直かな。
それと、e.KeyState = 8 のマジック ナンバーもちょっと気になったり...

___________________________________________________________________________________
じゃんぬ - Microsoft MVP for Visual Developer C#
  C#, VB.NET 入門  http://jeanne.wankuma.com/
  じゃんぬねっと日誌 http://blogs.wankuma.com/jeanne/
2006/03/23(Thu) 22:40:39 編集(投稿者)

ふたばさん、じゃんぬねっとさん

お答え頂き有難うございます。
ふたばさん、初めてのご回答とのことですが、
丁寧に教えて頂きありがとうございます。
よくわかりました。

予約語を変数名に使用したい場合、
角括弧[]を付けて重複しないようにしているのですね。
検索が足りませんでした。
現在のログのみ、検索しておりました。
(キーワード「 [] 」で検索しました。)

また、0,1 の組み合わせで複数の Flag をまとめて表現している
ものがあり、And 演算で判断するとのこと、よくわかりました。
そのような値の属性を FlagsAttribute 属性と呼ぶんですね。
じゃんぬねっとさん、勉強になりました。
ご教授頂き有難うございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板