Вызывается функция сохранения дочернего элемента, но ключевое слово MyBase
в этой функции вызывает родительскую функцию. Похоже, что родительская версия функции Save()
имеет тип возврата Parent
. Как будто у вас был этот код:
Public Overloads Function Save() As Child
Dim result As Parent = MyBase.Save()
Return result
End Function
Запрещено возвращать объект одного типа, когда объявлена функция, возвращающая другой тип ... если, как говорится в сообщении об ошибке, неявное преобразование определено между двумя типами. Наследование не гарантирует такого преобразования.
Несовпадение возвратов может привести к взрыву во время выполнения. Это именно то, почему вы всегда должны иметь Option Strict On . Это поможет вам лучше разобраться в типах наследования.
Предположительно, когда Child
наследует Parent
, он добавляет свои собственные поля, свойства или методы. По крайней мере, это обычная причина наследования. Итак, теперь вы пытаетесь вернуть объект без каких-либо дополнительных вещей вызывающей стороне, которая не знает, что он отсутствует. Это рецепт катастрофы.
Вы можете это исправить, добавив Cast()
к приведенному выше коду, но из-за проблем, описанных здесь, может быть лучше переписать это, чтобы использовать композицию вместо наследования.