没有调用最佳匹配的重载方法

时间:2016-04-06 17:42:10

标签: vb.net

我有以下方法:

  Public Function RenderRateTable() As String

  Private Function RenderRateTable(ToddVersionedObject As ToddVersionedObject, 
                                   FieldInfo As FieldInfo) As String

  Private Function RenderRateTable(ArrayIndexes As List(Of ArrayIndexesAttribute.ArrayIndex), 
                     ThreeDimensionalArray As ThreeDimensionalDecimalArrayType) As String

  Private Function RenderRateTable(ArrayIndexes As List(Of ArrayIndexesAttribute.ArrayIndex), 
                                TwoDimensionalArray As ArrayOfDecimalArraysType) As String

请注意,我正在重载的类型(ArrayOfDecimalArraysTypeThreeDimensionalDecimalArrayType)不是从同一基类继承的类。它们是不同于任何东西的不同结构。它们是由别人写的,我不能改变它们。

当我在同一类中称之为时,就像这样

Dim MyThreeDimensionalDecimalArrayType As ThreeDimensionalDecimalArrayType
RenderRateTable(MyArrayIndexes, CType(MyThreeDimensionalDecimalArrayType, Object))

它没有采用正确的方法。它只是RenderRateTable()

更奇怪的是,调用是用两个参数(参数)进行的,但这些是(忽略?)并调用一个不带参数的方法,不会抛出运行时错误!

我有Option Strict Off,我传递给参数ThreeDimensionalArray的变量是Object类型。

我正试图将它带到我有一堆重载的地方,并根据传递的Object的类型选择正确的方法。

多态方法调用而不是Select Case语句。我讨厌这样的条件块。

更新

我通过声明重载Public来使代码工作,但我仍然不明白:

  1. 为什么调度员找不到合适的Private方法 电话是在同一个班级内。
  2. 为什么调度程序在使用2个参数进行调用时会调用没有参数的方法,而不会抛出错误。

1 个答案:

答案 0 :(得分:3)

RenderRateTable()Public,其余为Private,这将阻止它从课堂外调用时使用正确的重载。

Option Strict On很可能会指出这是一个问题:我建议您使用它来简化编程工作:)