Je sais que cela a été posté il ya quelques mois, mais je vais encore essayer de répondre, peut-être juste pour l'exhaustivité.
Vous avez été informé que vous pouvez accéder à la méthode substituée de au sein de la classe dog
, et que vous pouvez ensuite l'exposer avec un nom différent. Mais qu'en est-il de l'utilisation d'un conditionnel?
Vous pouvez juste faire:
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
Et puis les appeler comme:
Dim dog As New Dog
Dim animal As new Animal
animal.Speak() //"Hello"
dog.Speak()//"Ruff"
dog.Speak(true)//"Hello"
Vous pouvez getTheAnimalInTheDog
et faire ilSpeak()
:
Vous pouvez juste faire:
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
Et puis encore:
Dim dog As New Dog
Dim animal As new Animal
animal.Speak() //"Hello"
dog.Speak()//"Ruff"
dog.GetTheAnimalInMe().Speak()//"Hello"
Hope it helps;)
« Une autre alternative, est de déclarer l'objet comme un animal, puis jeté à un chien quand vous avez besoin des propriétés étendues du chien " Cette dernière partie n'est pas vraie. Le type déclaré de la variable n'a pas de sens quand il s'agit de la façon dont une instance donnée se comporte polymorphiquement. –
C'est vrai, je pensais en termes d'interfaces. –