初級講座46 クラスの作成でコンストラクタ変数宣言
投稿者 魔界の仮面弁士  (社会人)
投稿日時
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 にした場合には、呼び出し側で
もしも DownloadCommander クラスにおいて、外部から変数の内容を変更されないようにするなら、
> 外部から直接、FolderName を操作している箇所がある様に思います。
> それはどこでしょうか?
リスト13がそれにあたります。もし、このフィールドが Private な場合、
利用側はリスト12の書き方をすることになります。
> コンストラクタ呼び出し側で指定した
> 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 21:48:14
魔界の仮面弁士様、ご回答、ありがとうございます。
>リスト13がそれにあたります。
'▼山県有朋
Commander.FolderName = "C:\Test"
の箇所ですね。すっきりいたしました。
今後とも宜しくお願いいたします。
>リスト13がそれにあたります。
'▼山県有朋
Commander.FolderName = "C:\Test"
の箇所ですね。すっきりいたしました。
今後とも宜しくお願いいたします。
投稿者 (削除されました)  ()
投稿日時
2010/2/9 04:35:07
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2010/2/9 04:41:23
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2010/2/9 05:26:15
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2010/2/9 05:32:29
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2010/2/9 06:09:25
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2010/2/9 06:40:19
(削除されました)
クラス学習初心者、特急まっさーの父です。
お世話になります。
以下、コンストラクタの内部、コンストラクタを呼び出す側で、
引数のやりとりがどうなっているのか
ご教示下さい。
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についても全く同じです)
以上、宜しくお願いいたします。