基本问题是使用数据绑定有哪些方法可以让用户选择子类来完成工作?
具体的例子。我有一个接受CalculationMethod(接口)的类来进行计算。 CalculationMethod有几种实现方式。 GUI开发人员只想使用数据绑定向用户提供选择。
我采取了一些方法。
最简单的方法是创建一个类,为所有实现返回一个(CalcuationMethod)列表,并将一个Name属性添加到CalculationMethod中以供显示。
扩展,我有时会创建一个使用反射来做同样事情的类(找到实现CalculationMethod的所有类)。这样我就不必记住添加新的实现,但它可能在Web应用程序中很糟糕(它很昂贵)或者不允许反射的环境。
有时我添加了枚举,每个枚举代表一个实现。有一个工厂方法接受枚举并返回正确的实现。这样GUI开发人员就可以绑定到枚举。如果必须以某种方式保留用户选择,我经常这样做。
以上所有都有优点和缺点。还有其他和/或更好的方法吗?
以下示例。 GUI开发人员会将下拉列表(或其他内容)绑定到CalculationOptions.Calculations,允许用户选择。我不会写其他的例子,因为你应该得到这个想法。 (我会使用反射来获取继承CalculatoinTemplate的所有类,或者我将拥有一个代表所有继承类的枚举。)
Public Class CalculationTemplate
Public MustOverride Readonly Property Name() as string
Public MustOverride Sub Calculate()
End Class
Public Class CalculationImp1
Public Overrides Sub Calculate()
End Sub
Public Overrides Readonly Property Name() as String
Get
Return "Imp1"
End Get
End Property
End Class
Public Class CalculationImp2
Public Overrides Sub Calculate()
End Sub
Public Overrides Readonly Property Name() as String
Get
Return "Imp2"
End Get
End Property
End Class
Public Class CalculationOptions
Public Shared Function Calculations() as List(Of CalculationTemplate)
Dim lst as New List(Of CalculationTemplate)
lst.add(new CalculationImp1)
lst.add(new CalculationImp2)
Return lst
End Function
End Class
答案 0 :(得分:0)
在CalculationOptions类中添加一个名为AddCalculationOption()的新函数,该函数将计算选项添加到列表中。
使用当前Object在CalculationTemplate的构造函数中调用AddCalculationOption函数,并将name()中的值作为参数返回。
因此,当创建对象时,它会自动添加到列表中。
您可以使用名称来显示名称和对象的地图。工厂可以使用它来返回适当的对象。
我希望我能正确理解你的问题。