【发布时间】:2016-09-22 01:03:09
【问题描述】:
我有一个程序可以反序列化 xml 文件中的内容并用它做各种花哨的事情。我在 XML 文件中有 2 个数组,一个名为 variables,一个名为 lookupTables。我还有 2 个课程,variable 和 lookupTable。这两个类都继承自一个名为definition 的类。 definition 仅继承,并且有一个必须继承的方法,evaluate。代码如下:
定义
Public MustInherit Class Definition
Public Sub New()
End Sub
<XmlAttribute("name")> _
Public Property name As String
Public MustOverride Function evaluate(variables As Dictionary(Of String, Double)) As Double
End Class
变量
<XmlRoot("variable")> _
Public Class Variable
Inherits Definition
<XmlAttribute("value")> _
Public Property value As String
Public Overrides Function evaluate(variables As Dictionary(Of String, Double)) As Double
Dim calculator As CalculationEngine = New CalculationEngine()
Return calculator.Calculate(value, variables)
End Function
End Class
查找表
<XmlRoot("lookupTable")> _
Public Class LookupTable
Inherits Definition
Public Sub New()
End Sub
<XmlElement("data")> _
Public Property data As Integer()()
Public Overrides Function evaluate(variables As Dictionary(Of String, Double)) As Double
Return True
End Function
End Class
我的问题(希望)非常简单。如何创建Defintions 的列表(即包含Variables 和LookupTables 的列表)而不丢失它们各自的方法和属性。我只需要调用evaluate即可使用此列表。
我想我可以创建一个List(Of Definition),因为Variable 和LookupTable 都保证实现evaluate(),但正如我所读到的,似乎对这两个列表进行类型转换会剥离它们自己的内部结构和只关注Definition 的共同点。我可以在这里做什么?
【问题讨论】:
-
当您将对象转换为定义时,您失去了对 LookupTables/Variables 类型的访问权限,但您始终可以随时将它们转换回来,以便根据需要访问它们的子类型。