使用可选参数重载覆盖

时间:2016-04-27 22:51:49

标签: vb.net

所以我有一个基类和一个继承类。

BASE CLASS

Friend Overridable Overloads Sub ProcessRecords(ByVal oDataKeyValuePair As KeyValuePair(Of String, Dictionary(Of String, Double)), ByVal oFilterValues As SDFilterCriteria.FilterType)
    'does stuff'
End Sub

Friend Overridable Overloads Sub ProcessRecords(ByVal oDataKeyValuePair As KeyValuePair(Of String, Dictionary(Of String, Double)), ByVal oFilterValues As SDFilterCriteria.FilterType, Optional ByVal MaxCount As Integer = 0)
    'does stuff'
End Sub    

儿童类

Friend Overloads Overrides Sub ProcessRecords(ByVal oDataKeyValuePair As KeyValuePair(Of String, Dictionary(Of String, Double)), ByVal oFilterValues As SDFilterCriteria.FilterType, Optional ByVal MaxCount As Integer = 0)
    'does other stuff
End Sub

但是当我建立时,我得到了

  

错误6

     

'朋友覆盖重载Sub ProcessRecords(oDataKeyValuePair As System.Collections.Generic.KeyValuePair(Of String,   System.Collections.Generic.Dictionary(Of String,Double)),   oFilterValues As SharedModels.FilterCriteriaBase.FilterType,[MaxCount   如整数= 0])' 无法覆盖' Friend Overridable Overloads Sub   ProcessRecords(oDataKeyValuePair As   System.Collections.Generic.KeyValuePair(Of String,   System.Collections.Generic.Dictionary(Of String,Double)),   oFilterValues As SharedModels.FilterCriteriaBase.FilterType)'的因为   它们因可选参数而异。

我有一种感觉,因为超载,但我似乎无法弄清楚。

2 个答案:

答案 0 :(得分:2)

这是因为除了可选参数,两个方法签名都是相同的。因此,如果您在未指定最后一个参数的情况下调用该方法,则无法告诉您要调用哪个方法。您是使用可选参数调用那个但省略了可选参数,还是调用了没有参数的方法?

答案 1 :(得分:0)

错误消息很明确。编译器认为您希望在没有可选参数的情况下覆盖重载方法。

我认为你应该在没有基类的可选参数的情况下删除重载方法,因为它无论如何都没有任何意义。

有两种选择:

  • 保留了2个重载方法,但必须要求MaxCount参数,没有此参数的方法应调用另一个指定所需MaxCount参数的默认值的方法。
  • 只有第二种方法保留在可选的MaxCount参数中。

您可以从这些选项中进行选择,以满足您的需求。之后,覆盖应该起作用。