下面的例子演示了如何做到这一点。该esstential诀窍是要记住,你可以可以使用的GetType函数定义的通用例如的GetType(为MyObject(中T))
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Test1 As New MyObject(Of String)
Dim Test2 As New MyObject(Of Integer)
Dim Data As String = ""
Test1.Data = "Hello World"
Test2.Data = 1010101
Data = Test1.SerializeObject
Test1 = MyObject(Of String).DeserializeObject(Data)
Debug.Print(Test1.Data)
Data = Test2.SerializeObject
Test2 = MyObject(Of Integer).DeserializeObject(Data)
Debug.Print(Test2.Data)
End Sub
End Class
Public Class MyObject(Of T)
Public Data As T
Public Sub New()
End Sub
Public Shared Function DeserializeObject(ByVal serializedXml As String) As MyObject(Of T)
Dim serializer As New XmlSerializer(GetType(MyObject(Of T)))
Return serializer.Deserialize(New IO.StringReader(serializedXml))
End Function
Public Function SerializeObject() As String
Dim serializer As New XmlSerializer(GetType(MyObject(Of T)))
Dim Result As New IO.StringWriter()
serializer.Serialize(Result, Me)
Return Result.ToString
End Function
End Class
如果你不喜欢完全限定的类型在共享成员得到再你可以做这样的事情。
Public Class MyObjectString
Inherits MyObject(Of String)
End Class
然后就可以调用MyObjectString.Deserialize
对不起,我想这对于共享的方法没有一个类的实例。您是否测试过这段代码,因为您无法调用共享方法并从中引用了一个成员变量var。 – 2011-02-16 15:06:47