2016-04-27 3 views
0

私は基本クラスと継承クラスを持っています。オーバーロードオプションパラメータによるオーバーライド

基底クラス

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

「友達をオーバーライドオーバーロードサブSystem.Collections.Generic.KeyValuePair(System.Collections.Generic.Dictionary(Of String、Double))、 oFilterValuesとしてSharedModels.FilterCriteriaBase.FilterType、[MaxCountとしてInteger = 0] 「友達オーバーライド可能オーバーロードサブ ProcessRecords(文字列、文字列、Doubleの System.Collections.Generic.Dictionary()の System.Collections.Generic.KeyValuePair()としてoDataKeyValuePair、SharedModels.FilterCriteriaBase.FilterTypeとして oFilterValuesを上書きすることはできません) ' これらはオプションのパラメータによって異なります。

私はそれが過負荷のためだと感じましたが、私はそれを理解できないようです。

答えて

0

エラーメッセージはクリアです。コンパイラは、オプションパラメータなしでオーバーロードされたメソッドをオーバーライドしたいと考えています。

とにかく意味がないので、基本クラスのオプションのパラメータを使わないでオーバーロードされたメソッドを削除する必要があると思います。

は、2つのオプションがあります。

  • は2つのオーバーロードされたメソッドが残っているが、MaxCountパラメータが必要とされなければならないと、このパラメータなしの1が必要MaxCountパラメータのデフォルト値を指定して、他のものを呼び出す必要があります。
  • オプションのMaxCountパラメータで2番目の方法のみが残ります。

必要に応じて選択できます。その後、無効にする必要があります。

2

オプションパラメータを除いて、両方のメソッドシグネチャが同一であるからです。したがって、最後のパラメータを指定せずにメソッドを呼び出すと、呼び出すメソッドを指定する方法がありません。オプションのパラメータで呼び出していますが、オプションのパラメータを省略していますか、またはパラメータを持たないメソッドを呼び出していますか?

関連する問題