genannt zu werden habe ich die folgenden Methoden:am besten passende überladene Methode ist nicht
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
Beachten Sie, dass die Typen, die ich zu überlasten (ArrayOfDecimalArraysType
, ThreeDimensionalDecimalArrayType
) sind nicht Klassen, die von der gleichen Basisklasse erben. Sie sind verschiedene Strukturen, die nichts erben. Sie wurden von jemand anderem geschrieben und ich kann sie nicht ändern.
Als ich es aus der gleichen Klasse nennen wie diese
Dim MyThreeDimensionalDecimalArrayType As ThreeDimensionalDecimalArrayType
RenderRateTable(MyArrayIndexes, CType(MyThreeDimensionalDecimalArrayType, Object))
es geht nicht in die richtige Methode. Es geht einfach zu RenderRateTable()
.
Was noch seltsamer ist, ist der Aufruf mit zwei Argumente (Parameter) gemacht, aber diese sind (ignoriert?) Und es ruft eine Methode, die keine Parameter und keine Laufzeitfehler ausgelöst wird!
Ich habe Option Strict Off
und die Variable, die ich übergeben, ist der Parameter ThreeDimensionalArray
vom Typ Object.
Ich versuche es zu bekommen, wo ich eine Reihe von Überladungen habe und es wählt die richtige Methode basierend auf dem Typ der Object
bestanden.
Polymorphe Methode Aufruf statt einer Select Case
Anweisung. Ich hasse bedingte Blöcke so.
UPDATE
bekam ich die indem er erklärt, die Überlastungen Arbeits Code Public
, aber ich verstehe immer noch nicht:
- Warum sollte der Disponent die richtige
Private
Methode nicht finden, wenn die Anruf ist innerhalb derselben Klasse. - Warum der Dispatcher eine Methode ohne Parameter aufrufen würde, wenn der Aufruf mit 2 Parametern erfolgt, und keinen Fehler auslösen.
Haben Sie die Absicht haben, 'RenderRateTable()' 'als Public' und der Rest als 'Private'? "Option Strict On" hätte das als Problem aufgezeigt. –
@AndrewMorton, Oh ja, deshalb funktioniert es nicht. Wenn Sie dies tun, muss jeder Überlastungskandidat öffentlich sein. Kannst du eine Antwort als solche posten, kannst du Punkte bekommen? – toddmo
Ich habe es in eine Antwort für Sie gemacht :) –