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
中的确切类型。这将使它与选项一起工作,并严格控制。这是世界上所有其他程序员都会做的,但不幸的是,我无法忍受。我讨厌当多态性是可能的时候选择Caseselectcase
将在每个Case
中重复方法调用。我患有强迫症。