在.NET中动态更改委托功能的可接受方法是什么?

时间:2009-06-18 18:56:47

标签: .net vb.net delegates

假设我有一个类,代表使用多种不同定价策略之一定价的产品。这个定价每秒发生几百次,所以为了消除重复的if / else语句,我改为使用委托来启动适当的策略,如下所示:

Private Delegate Sub PricingModel(ByVal params As PricingParameters)
Private myPricingModel As PricingModel
Private myPricingParameters As PricingParameters

Public Sub RunPricingModel()
    myPricingModel(myPricingParameters)
End Sub

我的问题是:如果我希望能够改变策略,我该如何处理myPricingModel?目前我只是将其设置为新的PricingModel:

Public Sub SwitchStrategy(ByVal strategy As PricingStrategy)
    Select Case strategy
        Case PricingStrategy.STRATEGY_X
            myPricingModel = New PricingModel(AddressOf PricingModelStrategyX)
        Case PricingStrategy.STRATEGY_Y
            myPricingModel = New PricingModel(AddressOf PricingModelStrategyY)
        Case Else
            Exit Sub
    End Select
End Sub

但这对我来说并不合适(虽然它似乎有效)。是否有接受/更好的方式这样做?或者这是标准方式?或者这只是一个从一开始就注定失败的方法?

2 个答案:

答案 0 :(得分:4)

这种整体方法没有任何内在错误。只要PricingStrategy以其他方式被接受作为枚举,那么这是一种完全可以接受的方式来改变不同定价策略的私人行为。

我唯一的挑剔评论是,在“Case Else”中你应该避免默默失败。

答案 1 :(得分:0)

您可以使用定价策略(C#)的静态类:

public static class PricingStrategies {
    public static PricingStrategyX( PricingParameters parameters ) { /* here is body */ }
    public static PricingStrategyY( PricingParameters parameters ) { /* here is body */ }
}

// ... somewhere elsewhere ...
public PricingStrategyDelegate Pricing;
// ...
this.Pricing = PricingStrategies.PricingStrategyX;