这可能吗?
Public Class Foo
public var as string
public sub Load(byval filename as string)
'This is done
[...]
oItem = [...] 'Code to deserialize
me = oItem 'THIS LINE
end sub
end class
这样你就可以从序列化文件加载foo,如下所示:
Public Sub Main
Dim f as Foo = new Foo()
f.load("myFile")
end sub
到目前为止,我已经有了一个将Foo作为Object返回的函数(我正在尝试使序列化/反序列化过程一般,所以我可以复制并粘贴并避免显式设置每个变量)
答案 0 :(得分:1)
不,你想要做的是让Load成为一个返回新创建项目的共享函数。
更像是:
Public Class Foo
public var as string
public Shared Function Load(byval filename as string) As Foo
'This is done
[...]
oItem = [...] 'Code to deserialize
Return oItem
end sub
end class
Public Sub Main
Dim f as Foo
f = Foo.load("myFile")
end sub
此外,您可以使用通用方法,而不是直接将反序列化嵌入到每个类中,例如:
''' <summary>
''' This method is used to deserialize an object from a file that was serialized using the SoapFormatter
''' </summary>
''' <param name="sFileName"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Deserialize(Of T)(ByVal sFileName As String) As T
' Exceptions are handled by the caller
Using oStream As Stream = File.Open(sFileName, FileMode.Open, IO.FileAccess.Read)
If oStream IsNot Nothing Then
Return DirectCast((New SoapFormatter).Deserialize(oStream), T)
End If
End Using
Return Nothing
End Function
然后您可以将其称为:
Public Sub Main
Dim f as Foo
f = Deserialize(Of Foo)("myFile")
end sub