【发布时间】:2011-06-21 17:14:04
【问题描述】:
基本问题是使用数据绑定有哪些方法可以让用户选择子类来完成这项工作?
具体例子。我有一个接受 CalculationMethod (接口)来进行计算的类。 CalculationMethod 有几种实现。 GUI 开发人员只想使用数据绑定向用户呈现选择。
我采取了一些方法。
最简单的方法是创建一个类,该类为所有实现返回一个(计算方法的)列表,并将名称属性添加到 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
【问题讨论】:
-
做一个虚拟的例子,以便更容易理解。
标签: .net oop data-binding polymorphism strategy-pattern