PCだい「ちゅき」

気がつけば庶事手伝い

目次

Blog 利用状況

ニュース

・H24/01/02
 Microsoft MVPを受賞しました
・H23/11/18
 MCTの憂鬱さんと相互リンクを張っていただきました^^
・H23/09/10
 プログラミング生放送でスピーカーさせていただきました^^ ・H22/12/18
 わんくま同盟でスピーカしました^^
さて、来年はどんな年になるかな。予想が当たるといいなぁ。
・H22/07/17
 わんくま同盟でスピーカしました^^
技術系のセッションは久しぶり。VB! VB!
・H22/03/13
 Tech FieldersでLTのスピーカしました^^
・H21/12/12
 わんくま同盟でスピーカしました^^
最近はずっとLT担当だったので、ちょっと新鮮でした^^
・H20/11/18
 Tech Fielders セミナー 大阪の
 Lightning Talkで優勝しました^^
・H20/8/23
 わんくま同盟で2回目のスピーカしちゃいました
 WCFと戯れてみました^^
・H20/5/17
 わんくま同盟でスピーカしちゃいました^^
 ちゃんとスピーカー持参しましたよんw
・H20/2/22
 なめ猫の参加証もらいました^^
・H20/1/22
 テンプレートを変えてみました^^
・H19/7/23
 ACEプログラムで、ナップサックをもらった上、工具セットももらえることになりました^^
・H19/1/11
 1が並ぶ縁起の良い日に投稿開始!。今後ともお付き合いよろしくお願いします
・H18/10/29
 参加させていただきました^^
ド・初心者ですがどうぞよろしくお願いします。

↓うーん、仕事しろ^^;
Chukiの脳内メーター

Chukiの脳内メーター

書庫

日記カテゴリ

ギャラリ

コミュニティ

相互リンク

Visual Basicのローカル変数

元ネタ
「楽を求めるなら「既定の」は積極的に使用すべき?」
http://blogs.wankuma.com/torikobito/archive/2007/10/05/99963.aspx

正直どうでもよいんですが、気になってしまいました^^;

ご存じのとおり、Visual Basicのローカル変数ではアクセス修飾子は指定できず、既定でPublicになってます(下記参照)

アクセス修飾子が指定できないのはローカル変数だからなのかなぁ、と思ってます。
ですが、「既定でpublic」ということは、わざわざpubicと解説する理由があるのか?とか変更が可能なのかなぁ、なんてずっと疑問だったりします^^;
#どーでもいいですよ、とつぶやきが聞こえてきそう(最近あのお姉さん見ませんね^^;)

ローカル変数ってローカルスコープを持つ自動オブジェクトのこと、と憶えてたです。
#そういえば、VBでのローカル変数の説明って、「プロシジャ内で宣言された変数」としか書いてませんね^^;

実際のところはどうなんでしょうね^^;


アクセス レベル プロシージャ内のローカル変数のアクセス レベルは、既定で public になります。このような変数にはアクセス修飾子を指定できません。

プロシージャ外のクラス変数およびモジュール メンバ変数のアクセス レベルは、既定で private になります。構造体メンバ変数のアクセス レベルは、既定で public になります。アクセス修飾子を使用してこれらのアクセス レベルを調整できます。

「Dim ステートメント (Visual Basic)」
http://msdn2.microsoft.com/ja-jp/library/7ee5a7s1(VS.80).aspx


自動記憶領域、自動オブジェクト C または C++ の auto または register と明示的に宣言されたか、あるいは extern または static と明示的に宣言されなかったローカル スコープ オブジェクトは、自動記憶領域を持ちます。そのような記憶領域を持つオブジェクトは自動オブジェクトです。自動オブジェクトの記憶領域は、それらが作成されたブロックが終了するまで保持されます。自動オブジェクトは、大部分のプログラマが「ローカル変数」または「スタック変数」だと考えるものです。

「 Deep C++  (C/C++ 用語集)」
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdndeepc/htm/c_glossary.asp


投稿日時 : 2007年10月5日 12:42

Feedback

# re: Visual Basicのローカル変数 2007/10/05 13:27 刈歩 菜良

> プロシージャ内のローカル変数のアクセス レベルは、既定で public になります。

ぐはっ、こないな説明がMSDNにあるんですね。
失礼しまくりんぐしました。
_(._.)_

ちょっと、調べてきます。

# re: Visual Basicのローカル変数 2007/10/05 13:35 刈歩 菜良

英語の方も読んだのですが、やっぱ同じことが書いてありますね。

で、こっから私の勝手な解釈ですが...

まず、CやC++の自動変数とC#やVB(.NET)のローカル変数は別物ですよね。

・CやC++の自動変数はブロック終了時になくなっちゃいます。
しかし、
・C#やVBのローカル変数はどっかから参照されている限りなくなりません(参照型の場合だけど)。

そういう意味で、参照さえ外部にさらせばPublicと同じになるので、PublicとMSDNでは表現しているのかもしれません。

がしかし、これには語弊があると思っていて、Privateなものでも参照さらせばPublicと同じわけです。

なので、わたし的には「プロシージャ内のローカル変数のアクセス レベルは、既定で public になります。」という表現は誤解を招くと思います。
#誤解というのは、「え?じゃあ、ローカル変数を外から自由に触れるの?」という誤解。だって、Publicってそういうものですよね。

# re: Visual Basicのローカル変数 2007/10/05 13:43 Chuki

刈歩さん>
なるほど。そういう解釈ですか^^

>表現は誤解を招くと思います。
そうなんですよ...
いろいろとこじつけて自分を納得させているんですが、やっぱり気持ち悪くて。

# re: Visual Basicのローカル変数 2007/10/05 18:33 シャノン

C/C++ だって、ポインタを外部にさらせば同じことでしょう。
ポインタ自体は消えちゃうけど、ポイント先は消えない。

あ、そこをメモリ図ですっきりさせてくれるわけですね!

# re: Visual Basicのローカル変数 2007/10/05 19:00 Chuki

>あ、そこをメモリ図ですっきりさせてくれるわけですね!
それだ!!

タイトル
名前
Url
コメント