【问题标题】:Overloads Overrides with an Optional Parameter使用可选参数重载覆盖
【发布时间】:2016-04-28 07:41:11
【问题描述】:

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

基类

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

'Friend 重载子 ProcessRecords(oDataKeyValuePair As System.Collections.Generic.KeyValuePair(Of String, System.Collections.Generic.Dictionary(Of String, Double)), oFilterValues As SharedModels.FilterCriteriaBase.FilterType, [MaxCount As Integer = 0])' cannot override 'Friend Overridable Overloads Sub ProcessRecords(oDataKeyValuePair As System.Collections.Generic.KeyValuePair(字符串, System.Collections.Generic.Dictionary(Of String, Double)), oFilterValues As SharedModels.FilterCriteriaBase.FilterType)' 因为 它们因可选参数而异。

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

【问题讨论】:

    标签: vb.net


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      错误信息很清楚。编译器认为你想重写没有可选参数的重载方法。

      我认为你应该删除基类中没有可选参数的重载方法,因为它没有任何意义。

      有两种选择:

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

      您可以从这些选项中选择适合您需要的选项。之后,覆盖应该起作用。

      【讨论】:

        猜你喜欢
        • 2013-02-02
        • 1970-01-01
        • 2018-02-20
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 2012-10-31
        • 2012-02-13
        • 1970-01-01
        相关资源
        最近更新 更多