Visual Basic 図解 基礎解説
VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応 VB2008対応

 

Visual Basic 中学校 > 図解 基礎解説 >

宣言の効果


この記事が対象とする製品・バージョン

VB2008対応 Visual Basic 2008 対象です。   VB.NET 2003 対応 Visual Basic.NET 2003 対象です。
VB2005 対応 Visual Basic 2005 対象です。   VB.NET 2002 対応 Visual Basic.NET (2002) 対象です。
        VB6対応 Visual Basic 6.0 × 対象外です。

 

概要

・変数・定数・関数・クラスなどを宣言する場合に使用するPublic, Friend, Protected, Private, Dim, Static, Protected Friendの効果について説明します。

 

1.宣言の効果

変数・定数・関数・クラスなど(以下これらを「プログラミング要素」と呼びます)、ほとんど(※1)の宣言は Public, Friend, Protected, Private, Dim, Static, Protected Friend, Sharedのどれかを用いて行います。宣言に用いるキーワードによって、以下の違いが発生します。

プログラミング要素の有効な範囲のことを「適用範囲」・「スコープ」などと呼びます。

※1、この他の宣言としてメソッドのパラメータ、UsingCatchLINQ構文がある。

 

2.適用範囲

適用範囲を一覧表にすると次のようになります。

  同じプロジェクト 異なるプロジェクト
  他クラス 派生クラス 同じクラス 他クラス 派生クラス
Public どこからでも参照できる
Protected Friend × Protected + Friendの効果
Protected × × 派生クラスから参照できる
Friend × × 同じプロジェクト内で参照できる
Private × × × × 自分からしか参照できない

DimSharedについては「4.Dim・Sharedの効果」参照。

この表は一見複雑そうですが、図にすると次のようになります。

宣言の適用範囲

この図はクラスAで宣言したプログラミング要素が他のクラスからどのように見えるか示したものです。この図ではクラスA1、クラスA2はクラスAの派生クラスです。

たとえば、クラスBからはクラスAでPublicまたはFriendで宣言したプログラミング要素を参照することができます。

 

3.宣言できる場所

  クラス(構造体)直下 プロシージャ内
Public, Friend, Protected, Protected Friend, Private ×
Dim
Shared ×
Static ×

△は宣言は可能ですが使用することが推奨されていないことを示します。

 

4.Dim・Sharedの効果

クラス直下でのDimSharedのみによる変数・定数の宣言はPrivateの効果があります。構造体直下ではPublicの効果があります。紛らわしいのでプロシージャの外ではDimを使わないという主義の人々もいます。Sharedも単体で使用するのではなくPrivate SharedPublic Sharedのように組み合わせて使用することが推奨されます。

なお、変数・定数におけるすべてのPrivatePublicProtectedFriendはそれぞれPrivate DimPublic DimProtected DimFriend Dimの略と考えるとこもできます。たとえばPublic Dim X As Integerと入力すると、自動的にPublic X As Integerに補正されます。

 

5.寿命

Public, Friend, Protected, Protected Friend, Private クラスが適用範囲から抜けた時点で消滅します。
クラス(構造体)直下のDim クラスが適用範囲から抜けた時点で消滅します。
プロシージャ内のDim プロシージャから抜けた時点で消滅します。
ブロック内のDim ブロックから抜けた時点で消滅します。
Shared アプリケーションの実行が終了するまで消滅しません。
Static クラスが適用範囲から抜けた時点で消滅します。

ブロックとはFor 〜 Next, Do 〜 Loop, If 〜 End Ifのようなブロック構造を指します。

※寿命が尽きてもすぐにメモリが解放されるわけではありません。メモリ解放のタイミングはガベージコレクタが自動的に管理しています。

 

6.まとめ

  適用範囲 寿命 宣言できる場所
Public すべて クラスが消滅するまで クラス直下
Protected Friend プロジェクト内・派生クラス内 クラスが消滅するまで クラス直下
Protected 派生クラス内 クラスが消滅するまで クラス直下
Friend プロジェクト内 クラスが消滅するまで クラス直下
Private 宣言したクラス内 クラスが消滅するまで クラス直下
クラス(構造体)直下のDim 宣言したクラス内 クラスが消滅するまで クラス直下
プロシージャ内のDim プロシージャ内 プロシージャが実行されている間 プロシージャ内
プロシージャ内のStatic プロシージャ内 クラスが消滅するまで プロシージャ内
ブロック内のDim ブロック内 ブロックを実行されている間 ブロック内
ブロック内のStatic ブロック内 クラスが消滅するまで ブロック内
クラス直下のShared(単体) 宣言したクラス内 不死 クラス直下
構造体直下のShared(単体) すべて 不死 構造体直下

 

7.参考:読み方

  読み方 英語の意味
Public パブリック みんなの
Protected プロテクテッド 守られた
Friend フレンド 友達
Private プライベート 個人の
Dim ディム 次元 (Dimension)
Static スタティック 変化しない
Shared シェアード 共有された