

開発環境はvb.netです  
public変数についてどのようなところで使用できるのか教えてください。


CC BY-SA 4.0
2020-02-17T07:26:04.117
63109
2020-08-07T05:02:02.237
2020-02-17T15:03:12.573
32986
37861
question
vb.net
public変数はどのようなところで使用できるのか教えてください


vb.netはやっていないですが、C#とほとんど同じだと思いますので、C#の場合で回答します。  
public変数はほかのクラスからアクセスしたい場合に使用します。  
通常は、public変数を使用せず、private変数にして、set,get用メソッドを介してアクセスする方がいいとされています。  
しかし、ちょっとしたテストプログラム等で、いちいちset,get用メソッドを用意するまでもないと判断した場合は、public変数にすることもあります。  
これでわかりますでしょうか？


CC BY-SA 4.0
2020-02-18T00:52:50.517
63133
2020-02-18T00:52:50.517
24490
63109
answer


public変数はプロシージャ外部に配置した変数で宣言できます。  
他のモジュールやクラスから読み書きしたい変数にpublicキーワードを含めます。  
詳細は[方法: 変数の可用性を制御する (Visual Basic)](https://docs.microsoft.com/ja-
jp/dotnet/visual-basic/programming-guide/language-features/declared-
elements/how-to-control-the-availability-of-a-variable)をご参照ください。

要するにpublic変数なら外部からアクセスできますが、private変数ではアクセスできない制約が付きます。  
ならばすべての変数をpublicにした方が便利だと思いませんか？

しかしプログラミングの教科書では「できるだけprivateやfriendなどを使って、変数に不要なアクセスはできないようにすべき」と書かれていることがほとんどです。  
上記のことを「変数のスコープを絞る」と言います。

例えばプロシージャ内部でForループしたい時に使う変数`i`の値がおかしいというエラーが発生したとします。  
この時に、変数`i`がprivateならばそのプロシージャ内部で`i`を使っている箇所を調べるだけで済みますが、publicの場合はどこから書き換えられているのか分からないのでアプリケーション全体で`i`を使っているところを見つけ出さなくてはいけません。  
もしもプロシージャAとプロシージャBで変数`i`を使いまわしていて、Aでループしている最中にBでループする処理が始まると`i`がリセットされることがエラーの原因ならば、エラーの再現や修正が難しくなることがあります。

どのようなところで、どのような時にpublic変数を使うのかについては、複数のモジュールなどで変数を共有すべきところで適切に使うことが綺麗なコーディングをするために求められます。

他の方の回答にあるように、public/privateを理解した次のステップとして`Get`、`Set`という[Property プロシージャ
(Visual Basic)](https://docs.microsoft.com/ja-jp/dotnet/visual-
basic/programming-guide/language-features/procedures/property-
procedures)を使うのが望ましいです。  
プロパティを使うと、他のモジュールから参照だけ許可する、書き換えられる値の範囲を制限する、などの細かい制御ができるようになります。


CC BY-SA 4.0
2020-08-07T05:02:02.237
69324
2020-08-07T05:02:02.237
9820
63109
answer