初級講座46 クラスの作成でコンストラクタ変数宣言 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 (削除されました)  () 投稿日時 2010/2/9 06:40:19
(削除されました)
投稿者 (削除されました)  () 投稿日時 2010/2/9 06:09:25
(削除されました)
投稿者 (削除されました)  () 投稿日時 2010/2/9 05:32:29
(削除されました)
投稿者 (削除されました)  () 投稿日時 2010/2/9 05:26:15
(削除されました)
投稿者 (削除されました)  () 投稿日時 2010/2/9 04:41:23
(削除されました)
投稿者 (削除されました)  () 投稿日時 2010/2/9 04:35:07
(削除されました)
投稿者 特急まっさーの父@初心者  (社会人) 投稿日時 2010/2/6 21:48:14
魔界の仮面弁士様、ご回答、ありがとうございます。


>リスト13がそれにあたります。

    '▼山県有朋
    Commander.FolderName = "C:\Test"

の箇所ですね。すっきりいたしました。
今後とも宜しくお願いいたします。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/2/6 20:04:49
> 右側の Folder は、おそらく
> コンストラクタ呼び出し側で指定した
>     Dim Commander As New DownloadCommander(Folder, LogFileName)
> の Folder だと思います。

その認識で正しいですよ。


> Me.FolderName は、何を表しているでしょうか? 

御明察のとおり、
> Me.FolderName が、クラス定義の最初で宣言している
>   Public FolderName As String
にあたります。


> であるならば、
>  Private FolderName As String
> と宣言しても差し支えない様に思います。
> Public でなければならない理由がよくわかりません。

動作上は、Private でも問題ありません。Public にした場合には、呼び出し側で
MsgBox( Commander.FolderName )
Commander.FolderName = Folder2
などとして、ダウンロード前にフォルダを変更することもできます。

もしも DownloadCommander クラスにおいて、外部から変数の内容を変更されないようにするなら、
Public ReadOnly FolderName As String
とすることで、読み取り専用のフィールドとすることもできます。


> 外部から直接、FolderName を操作している箇所がある様に思います。
> それはどこでしょうか?

リスト13がそれにあたります。もし、このフィールドが Private な場合、
利用側はリスト12の書き方をすることになります。
投稿者 特急まっさーの父@初心者  (社会人) 投稿日時 2010/2/6 19:41:16
はじめまして。
クラス学習初心者、特急まっさーの父です。
お世話になります。


以下、コンストラクタの内部、コンストラクタを呼び出す側で、
引数のやりとりがどうなっているのか
ご教示下さい。


http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard46.htm
にて、下記リスト10、リスト11が質問対象です。



■リスト10:DownloadCommanderクラスのプログラム。コンストラクタの実装。

Public Class DownloadCommander

 (中略)
    Dim wc As Net.WebClient = New Net.WebClient()

    Public FolderName As String
    Public LogFileName As String

    '■コンストラクタ
    ''' <param name="Folder">ダウンロードしたファイルの保存先フォルダ</param>
    ''' <param name="LogFile">ダウンロード履歴を記録するファイル</param>
    Public Sub New(ByVal Folder As String, ByVal LogFile As String)

        Me.FolderName = Folder
        Me.LogFileName = LogFile

    End Sub
 (後略)



■リスト11:フォーム側のプログラム。新しいコンストラクタとDownloadメソッドの呼び出し。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 (中略)

    Dim Commander As New DownloadCommander(Folder, LogFileName)

    Commander.Download(URL)

 (後略)



この、リスト10の
        Me.FolderName = Folder
がよくわからないのです。


右側の Folder は、おそらく
コンストラクタ呼び出し側で指定した
    Dim Commander As New DownloadCommander(Folder, LogFileName)
の Folder だと思います。

Me.FolderName は、何を表しているでしょうか? 

Me.FolderName が、クラス定義の最初で宣言している

   Public FolderName As String
であるならば、
  Private FolderName As String
と宣言しても差し支えない様に思います。
Public でなければならない理由がよくわかりません。

Public でないといけないとすれば、
外部から直接、FolderName を操作している箇所がある様に思います。
それはどこでしょうか?

(説明は、FolderName についてさせて頂きましたが、
 LogFileについても全く同じです)

以上、宜しくお願いいたします。