VB.Net: クラスの共有メソッドの作り方?
あと3日でVB.Net学習2ヶ月目という初学者です。
Sub Main() のみで基本事項の確認のみをしてきました。
ですから、フォーム、レポート、データベース、WEB関連の知識は完全にゼロ。
さて、その基本演習も最終段階に突入。
いよいよクラスです。
' ==============================
' クラスプログラミング; 演習3
' ==============================
Module theClass
Sub Main()
Dim T1 As New TEST1
T1.Member1 = "T1.Member1"
T1.Member2 = "T1.Member2"
T1.BSave("D:\Temp\T1.bin", DirectCast(T1, Object)) <--- ?1
T1.Member1 = "AAA"
T1.Member2 = "BBB"
Debug.Print(T1.Member1)
Debug.Print(T1.Member2)
T1.BLoad("D:\Temp\T1.bin", T1) <--- ?2
If T1 IsNot Nothing Then
Debug.Print(T1.Member1)
Debug.Print(T1.Member2)
Else
Message("T1.bin は読み込めませんでした。")
End If
End Sub
End Module
?1=インスタンスを経由する共有メンバ、・・・へのアクセスです。正規の式は評価されません。
?2=Option strict on では、'ByRef' パラメータのオブジェクトの値を・・・縮小変換できませんでした。
Public Shared Sub BSave(ByVal aPath As String, ByVal aObject As Object)
Try
Using fs As New FileStream(aPath, FileMode.Create, FileAccess.Write)
Dim bf As New BinaryFormatter
bf.Serialize(fs, aObject)
fs.Close()
End Using
Catch ex As IOException
MsgBox(ex.Message & "(BSave)", MsgBoxStyle.Exclamation, "エラー:")
End Try
End Sub
Public Sub BLoad(ByVal aPath As String, ByRef aObject As Object)
If File.Exists(aPath) Then
Try
Using fs As New FileStream(aPath, FileMode.Open, FileAccess.Read)
Dim bf As New BinaryFormatter
aObject = bf.Deserialize(fs)
fs.Close()
End Using
Catch ex As IOException
MsgBox(ex.Message & "(BLoad)", MsgBoxStyle.Exclamation, "エラー:")
End Try
End If
End Sub
非共有の BSaveメソッドとBLoadメソッドのパラメータはファイルパスだけ。
共有メソッドの場合は、「何を」というのが必要かと思って2つ目のパラメータを追加。
もって、構造体の BSave と BLoad とに援用するテストをしたいと思っています。
し、しかし、上述の2つのエラーを前にどうしてよいか皆目わかりません。
>そのエラーを回避、もしくは発生させないためには次のように改造したらよい!
そういう回答等をお願いします。