<Attention>
MS Access のレベルではありません。(※ 私はとってもレベル低いです。)
</Attention>
MSDN:Visual Basic でのアクセス レベル(http://msdn2.microsoft.com/ja-jp/library/76453kax(VS.80).aspx)
コレ↑のことです。クラスだったり、変数だったりにアクセスするために必要な権限の程度のことですね。何があってどれがどのような権限なのかはリンク先を見ていただけるとお分かりになるかと思います。(ここを怠ける自分がちょっとキライ。)
で、今回のエントリのタイトルは「みんなともだち。」なわけなんですが、分かる方は分かりますよね?(アレですよ、ほら、例の。)
さて、なんのことやら?とお思いの方や、私自身のためにやってみますよ。Visual Studio 2005 を使用して Visual Basic で WindowsApplication プロジェクトを作成します。プロジェクト名は「WindowsApplication1」でいいや。
で、例によって出来上がった Form1 にデザイナのツールボックスから Button をそーっと配置してみましょ。配置しましたか?しましたね?Button1 ですよね?ではそのままデザイナでその
Button1 のプロパティを眺めてみてください。
ともだち(Friend)いましたか?
Modiffier プロパティが 'Friend' になっていますね。そうなんです、Visual Studio 2005(.NET 2003でも。)でVisual Basicのプロジェクトを作成するとデザイナから配置されたコントロールやらのアクセスレベルがデフォルトでは 'Friend' なんですよ!(ここ、びっくりするとこ!)C♯だと 'private' になるはずです。
「べつにどーってコトねーぢゃん。」ってお思いのあなた、いろいろあるんですよ、オブジェクト指向の観点からだとか。(←改めて書けたら書きます。)今回はこのことが感覚的に「なんか・・・やばくね?」って思えるようなことをしておきます。今までの流れの続きで以下の用意をしてください。
- Form1 にボタンをもうひとつ追加。(Button2 という名前で)
- 新たに Form2 を作成する。
- Form2 にボタンをひとつ追加。(Button1 という名前で。Text プロパティは "Form2 のButton1だよ。" にしておくとなおヨシ!)
- Form1 のコードは以下の内容にします。
Public Class Form1
Private f2 As Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
f2 = New Form2
f2.Show()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Controls.Add(f2.Button1)
End Sub
End Class
- Form2 のコードは以下の内容にします。
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show("らめぇぇぇぇ~!")
End Sub
End Class
さて、用意ができました。デバッグ実行でもしてみましょう。
まず、実行すると Form1 が表示されますね。次に Form1 の Button1 をクリックしてみます。すると Form2 が表示されますね。ここまでは問題なっしんぐ。さらに
Form1 の Button2 をクリックしてみます。すると・・・
あっ!Form2 のボタンが Form1 に!!?
さらにその(Form2 から Form1 にいっちゃった)ボタンをクリックしてみると・・・
らめぇぇぇぇ~!
・・・どうですか?コレを見て「やばくね?」って思っていただけるとうれしいです。つまり、ボタンのアクセス レベルが 'Friend' であるがゆえに、Form1
が Form2 のボタンを盗っちゃえるんですね。自分以外の人がもし、あなたの Form に対してこんなことしたとしたら・・・ヤですよね。
というわけで、アクセスレベルを考えましょうっていうお話でした。