Vb.net 未调用最佳匹配重载方法

Vb.net 未调用最佳匹配重载方法,vb.net,Vb.net,我有以下方法: Public Function RenderRateTable() As String Private Function RenderRateTable(ToddVersionedObject As ToddVersionedObject, FieldInfo As FieldInfo) As String Private Function RenderRateTable(ArrayIndex

我有以下方法:

  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
请注意,我重载的类型(
ArrayOfDecimalArraysType
ThreedimensionalDecimalArrayStype
)不是从同一基类继承的类。它们是不同的结构,不从任何东西继承。它们是别人写的,我无法更改

当我从同一个类中这样称呼它时

Dim MyThreeDimensionalDecimalArrayType As ThreeDimensionalDecimalArrayType
RenderRateTable(MyArrayIndexes, CType(MyThreeDimensionalDecimalArrayType, Object))
这不是正确的方法。它只是转到
renderratable()

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

我有一个
选项Strict Off
,我传递给参数
ThreeDimensionalArray
的变量是Object类型

我试图让它达到一个有大量重载的位置,它根据传递的
对象的类型选择正确的方法

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

更新

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

  • 为什么调度程序在调用时找不到正确的
    Private
    方法 调用在同一个类中
  • 为什么当使用2个参数进行调用时,dispatcher会调用没有参数的方法,而不会抛出错误

  • 您将
    renderratable()
    设置为
    Public
    ,其余设置为
    Private
    ,这将阻止它在从类外部调用时使用正确的重载


    很有可能严格遵循
    选项会指出这是一个问题:我建议您使用它来简化编程:)

    您是否打算将
    renderratable()
    作为
    公共
    ,其余作为
    私有
    <代码>选项严格限制
    可能会指出这是一个问题。@AndrewMorton,哦,是的,这就是它不起作用的原因。当你这么做的时候,每个超负荷的候选人都必须公开。你能发布一个这样的答案吗?你能得到一些分数吗?我已经为你做了一个答案:)你帮助我让它工作,这是最主要的。但是这里有什么不直观的,首先这个问题的原因是,呼叫来自同一个类!我还是不明白为什么调度员找不到它。我已经让它工作了,但我仍然不明白为什么private不起作用。@toddmo从问题“我传递给参数ThreeDimensionalArray的变量是Object类型的。”这可能也会妨碍重载选择。我有点希望在我必须找到一个好的解释之前,您可以使用Option Strict On并纠正这个问题……使用
    Option Strict On
    编译时,这不会发生。它给出了error
    选项Strict On,不允许从“Object”隐式转换为“您可以使用,例如,
    DirectCast(someObject,threedimensionalDecimalarayType)
    ,尽管理想情况下
    someObject
    首先应该是正确的类型。对,我可以。但是我必须有一个
    选择Case
    并检查类型,然后转换为每个
    Case
    中的确切类型。这将使它与
    选项一起工作,并严格控制
    。这是世界上所有其他程序员都会做的,但不幸的是,我无法忍受。我讨厌当多态性是可能的时候选择Case
    selectcase
    将在每个
    Case
    中重复方法调用。我患有强迫症。