Я знаю, что это было опубликовано несколько месяцев назад, но я все равно попытаюсь ответить, может быть, только ради полноты.
Вам сообщили, что вы можете получить доступ к методу overriden от в пределах класса dog
, и затем вы можете выставить его с другим именем. Но как насчет использования условного?
Вы можете просто сделать:
Public Class Animal
Public Overridable Function Speak(Optional ByVal speakNormal as Boolean = False) As String
Return "Hello"
End Function
End Class
Public Class Dog
Inherits Animal
Public Overrides Function Speak(Optional ByVal speakNormal as Boolean = False) As String
If speakNormal then
return MyBase.Speak()
Else
Return "Ruff"
End If
End Function
End Class
А потом называть их люблю:
Dim dog As New Dog
Dim animal As new Animal
animal.Speak() //"Hello"
dog.Speak()//"Ruff"
dog.Speak(true)//"Hello"
В качестве альтернативы, вы можете getTheAnimalInTheDog
и сделать этоSpeak()
:
Вы можете просто сделать:
Public Class Animal
Public Overridable Function Speak() As String
Return "Hello"
End Function
Public MustOverride Function GetTheAnimalInMe() As Animal
End Class
Public Class Dog
Inherits Animal
Public Overrides Function Speak() As String
Return "Ruff"
End Function
Public Overrides Function GetTheAnimalInMe() As Animal
Dim a As New Animal
//Load a with the necessary custom parameters (if any)
Return a
End Function
End Class
А потом опять:
Dim dog As New Dog
Dim animal As new Animal
animal.Speak() //"Hello"
dog.Speak()//"Ruff"
dog.GetTheAnimalInMe().Speak()//"Hello"
Надеется, что это помогает;)
«Другая альтернативе, чтобы объявить объект как животное, а затем бросить его на собаку, когда вам нужно расширенные свойства собаки «. Эта последняя часть неверна. Объявленный тип переменной бессмыслен, когда дело доходит до того, как данный экземпляр ведет себя полиморфно. – 2008-10-28 21:56:00
Это правда, я думал с точки зрения интерфейсов. – 2008-10-29 02:22:55