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

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

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

Re[2]: 定数にMeを付けたら警告がなぜ出るのか


(過去ログ 61 を表示中)

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

■35045 / inTopicNo.1)  定数にMeを付けたら警告がなぜ出るのか
  
□投稿者/ 1年生 (1回)-(2009/04/17(Fri) 17:39:37)

分類:[VB.NET/VB2005 以降] 

素朴な疑問があります。

VB.Net2005なんですが、
クラスのメンバとして、

Private Const abc As String = "abc"

を宣言し、
フォームロードのイベント内で、

Dim 変数 As String = Me.abc

とすると、
「インスタンスを経由する共有メンバ、定数メンバ、列挙型メンバ、または入れ子にされた型へのアクセスです。正規の式は評価されません。」
と警告が出ます。

Meを外せば済む話なんですが、
気になって仕方ないのです。
かといって、自分で調べたのですがそれらしい情報は見つからず、
質問させて頂きました。

ご存じの方、教えてください。

引用返信 編集キー/
■35048 / inTopicNo.2)  Re[1]: 定数にMeを付けたら警告がなぜ出るのか
□投稿者/ よねKEN (319回)-(2009/04/17(Fri) 18:02:35)
> 「インスタンスを経由する共有メンバ、定数メンバ、列挙型メンバ、または入れ子にされた型へのアクセスです。正規の式は評価されません。」
> と警告が出ます。

このエラーのヘルプは以下ですね。
http://msdn.microsoft.com/ja-jp/library/y6t76186(VS.80).aspx

> Meを外せば済む話なんですが、
> 気になって仕方ないのです。

Meはインスタンスのメンバにアクセスするためにだけ使用できます。
定数はインスタンスに紐づくメンバではなく、そのクラス自身に紐づくメンバとして扱われるため、
Meを介したアクセスはVBコンパイラが禁止しています。

引用返信 編集キー/
■35049 / inTopicNo.3)  Re[1]: 定数にMeを付けたら警告がなぜ出るのか
□投稿者/ 魔界の仮面弁士 (1046回)-(2009/04/17(Fri) 18:07:50)
No35045 (1年生 さん) に返信
> Private Const abc As String = "abc"
> Dim 変数 As String = Me.abc
> 「インスタンスを経由する共有メンバ、定数メンバ、列挙型メンバ、または入れ子にされた型へのアクセスです。正規の式は評価されません。」

オブジェクト インスタンスのメンバではなく、型自体のメンバと看做されるためです。
フォームのインスタンスを表す Me ではなく、型を表す Form1 を使って
  Dim 変数 As String = Form1.abc
などとすれば、警告は発生しなくなります。


これは定数だけではなく、Shared なメンバであっても同様です。

たとえば日付型には、最大の日付値(9999/12/31 23:59:59.9999999)を返すための
「MaxValue」という読取専用プロパティが用意されており、
  Dim dt1 As Date = Date.MaxValue
のようにして利用することができます。

この MaxValue は、日付型そのものが持つ、共有(Shared)なメンバであって、
特定の日付値に対するメンバではありません。そのため、
  Dim dt2 As Date = #12/31/2000#.MaxValue
  Dim dt3 As Date = Now.MaxValue
のような記述に対しては、今回の警告メッセージが表示されます。
引用返信 編集キー/
■35052 / inTopicNo.4)  Re[2]: 定数にMeを付けたら警告がなぜ出るのか
□投稿者/ 1年生 (2回)-(2009/04/17(Fri) 19:52:43)
2009/04/17(Fri) 20:15:45 編集(投稿者)

よねKEN さん、魔界の仮面弁士 さん
ご回答ありがとうございます。

共有メンバ、定数メンバ、列挙型メンバは、静的なので、
オブジェクトインスタンス(動的)でアクセスするのは目的が異なるので、
警告が表示されるという認識でよいでしょうか?

インテリセンスに表示されるので、
度々やってしまうかも知れませんが、
この理由が分かってれば迷わずに済みますね。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -