- PR -

VS2005では'インスタンスを経由する共有メンバ〜'の警告が出る

1
投稿者投稿内容
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2005-12-06 16:50
こんにちは。

コード:
Dim res As DialogResult = MessageBox.Show("ほげほげ", _
                            "ほげ",MessageBoxButtons.OK)
If res = DialogResult.OK Then
  ・・・処理・・・
End If


上記のソースコードでVS2003(VB.NET)では問題ないのですがVS2005ではif文の箇所で
'インスタンスを経由する共有メンバ、定数メンバ、列挙型メンバ、または入れ子に
された型へのアクセスです。正規の式は評価されません'とでます。

コード:
res = Windows.Forms.DialogResult.OK


と、名前空間をきちっと付けると問題ないようです。
自分で作った列挙型定数のアクセスもVS2003まで問題なかったのですが、VS2005から
警告が出ます。

これはどういうことなのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-07 01:37
これだと警告は表示されますでしょうか?

コード:

    If MessageBox.Show("ほげほげ", "ほげ", MessageBoxButtons.OK) = DialogResult.OK Then

    End If


res のことを言っているのかな? > インスタンスを経由する

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-12-07 04:18
FormのDialogResultプロパティを見ているっぽいですね。
つまり、res = Me.DialogResult.Okになっているということ。
インスタンス経由とはMe.DialogResult経由ということですね、多分。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2005-12-07 09:49
こんにちは。

じゃんぬねっとさん、同じでした。
なちゃさんが言われているとおりでした。

フォームを継承したクラスの中のメソッドに書くと警告が出て、フォームでないクラス
の中では名前空間が無くとも問題ありませんでした。

調べてみると、Formクラスの中にもDialogResultプロパティがあり、Formクラスの
中からだとそのプロパティのほうを見ているようです。

VS2003(VB.NET)では、'If res =' と打ち込んだときにでるインテリセンスは、名前空間
を省略したDialogResult.Okなどの形で一覧がでて、問題なくコンパイルできていたので
すが、そのソースをVS2005に持っていったとたんに警告がわんさか出る状態でした。

VS2005でのインテリセンスではWindows.Forms.DialogResult.OKと名前空間付で表示され
ていました。

その他、ImeModeやMouseButtonsなどもFormクラスのプロパティがあり、同様の問題で
警告がわんさかでていたので若干パニックってました。

ちなみに、いままでDialogResultや列挙型は何気なく使っていたのですが、あらためて
調べて見ると非常に違和感を感じました。

Enumってクラスの外でも宣言できるのですね。しかも、FormクラスなどにはDialogResultなどEnumで宣言されているものと同名のものがプロパティで実装されて
いるとは知りませんでした。
Javaをやっていたせいか、この部分の仕組みは知らず知らずに誤解のあるコードを
書いてしまうような感じがして、違和感があるのは私だけでしょうか?

今の開発環境はインテリセンスで勝手にコードを補完してくれるので気にはしませ
んが、あらためてこのような問題がでると、言語仕様をきちんと理解できていない
ことに気がつきますね。

1

スキルアップ/キャリアアップ(JOB@IT)