Выключение Option Strict
позволило вам сделать звонок с поздней привязкой Accept(o)
.
Чистое решение, которое также решает вашу проблему с ошибками во время выполнения, - это снова включить Option Strict
и выполнить вызов с поздней привязкой вручную. Так что, в принципе, вы бы заменили
Public Sub AcceptShape(s as Shape)
AcceptAny(s)
End Sub
Private Sub AcceptAny(o as Object)
Accept(o)
End Sub
с
Public Sub AcceptShape(s as Shape)
GetType(ShapeAcceptor).InvokeMember("Accept", BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, Me, new Object() {s})
End Sub
(Подробнее см. Документацию Type.InvokeMember . Вам потребуется Imports System.Reflection
для BindingFlags
.)
Это в основном делает то же, что и ваш Accept (o), за исключением того, что он "Option Strict" -совместим.