• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB.Net: クラスの共有メソッドの作り方?)

VB.Netクラスの共有メソッドの使い方とエラーの回避方法

このQ&Aのポイント
  • VB.Netでクラスの共有メソッドを作成する方法と、エラーの回避方法について教えてください。
  • ファイルの保存と読み込みに関する共有メソッドの作成方法を詳しく教えてください。
  • エラー「正規の式は評価されません」および「'ByRef' パラメータのオブジェクトの値を縮小変換できませんでした」とは何ですか?どのように回避すればよいですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

?1: Sharedなメソッドを呼び出すのですから, インスタンス.メソッド の形ではなく 型.メソッド の形になります。 つまり,今回の場合は, TEST1.BSave("D:\Temp\T1.bin", T1) のように書く必要があります。 各クラスはSystem.Objectを暗黙の内に継承しているため,Objectへのキャストを書く必要はありません。 ?2: 第2引数には,デシリアライズされたオブジェクトを代入するための,Object型の変数を指定します。 つまり, Dim obj As Object = Nothing T1.BLoad("D:\Temp\T1.bin", obj) Dim T2 As TEST1 = TryCast(obj, TEST1) If T2 IsNot Nothing Then のような形になります。 ところで,Sharedの修飾がどう考えても逆に思えますが。 <Serializable> _ Public Class Test  Public Sub Save (ByVal fileName As String)   '自分自身をfileNameに保存する  End Sub  Public Shared Function Load (ByVal fileName As String) As Test   'fileNameから読み込む  End Function End Class のような形になるのが自然だと思います。 これだと, Dim t As Test として, ' 保存 t.Save("D:\Temp\t1.bin") '読み込み t = Test.Load("D:\Temp\t1.bin") のように書くことになります。

noname#140971
質問者

お礼

>共有メソッドはクラス名でアクセスする! 読み飛ばしていました。 >ところで,Sharedの修飾がどう考えても逆に思えますが。 BLOAD を共有にするのを忘れていました。 無用の混乱を与えてすみません! ですから、以下の修正で成功しました。 本当にありがとうございました。 ' ============================== ' クラスプログラミング; 演習3 ' ============================== Module theClass   Sub Main()     Dim T1 As New TEST1     Dim obj As Object = Nothing     T1.Member1 = "T1.Member1"     T1.Member2 = "T1.Member2"     TEST1.BSave("D:\Temp\T1.bin", T1)     T1.Member1 = "AAA"     T1.Member2 = "BBB"     Debug.Print(T1.Member1)     Debug.Print(T1.Member2)     TEST1.BLoad("D:\Temp\T1.bin", obj)     If T1 IsNot Nothing Then       Debug.Print(TryCast(obj, TEST1).Member1)       Debug.Print(TryCast(obj, TEST1).Member2)     Else       Message("T1.bin は読み込めませんでした。")     End If   End Sub End Module Public Sub BSave (ByVal fileName As String)   '自分自身をfileNameに保存する End Sub これは非共有のメソッドとして書きました。 ただ、非共有と共有の共存については未だテストしていません。 本日が、クラス演習の初日なのでよく個も全体もわかっていません。 本当にありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A