Je me demandais si la classe parent pouvait instancier un objet d'une classe enfant sans entrer dans une récursion infinie.Dépassement de pile pour débordement de pile
Considérons cet exemple:
Module Module1
Sub Main()
Dim _baseFruit As New Fruit
_baseFruit.Write()
Console.ReadKey()
End Sub
End Module
Public Class Fruit
Public Property Type As String
Public Property BaseType As String
Public Property FruitType As New Apple
Sub New()
Type = "Fruit"
BaseType = "N/A"
End Sub
Public Sub Write()
Console.WriteLine("Type: {0} BaseType: {1} FruitType: {2} ", Type, BaseType, FruitType.Type)
End Sub
End Class
Public Class Apple
Inherits Fruit
Public Sub New()
Me.Type = "Apple"
End Sub
End Class
Dès qu'un Apple instancié, il est entrer dans la récursion infinie.
Est-il incorrect de dire que c'est impossible, c'est d'avoir un enfant référencé dans le parent qui est aussi la base?
EDIT: De la réponse ci-dessous j'ai mis à jour le code, et voilà, cela fonctionne.
Module Module1
Sub Main()
Dim _baseFruit As New Fruit
Dim _apple As New Apple
_baseFruit.Write(_apple)
Console.ReadKey()
End Sub
End Module
Public Class Fruit
Public Property Type As String
Public Property BaseType As String
Public Property FruitChildInstance As Apple
Sub New()
Type = "Fruit"
BaseType = "N/A"
End Sub
Public Sub Write(ByVal fruit As Apple)
FruitChildInstance = fruit
Console.WriteLine("Type: {0} BaseType: {1} FruitType: {2} ", Type, BaseType, FruitChildInstance.Type)
End Sub
End Class
Public Class Apple
Inherits Fruit
Public Sub New()
Me.Type = "Apple"
End Sub
End Class
Très éloquent et facile à comprendre. Je vais mettre à jour la classe pour tenir compte de cela. Bien sûr, je dirais que si vous faites cela, vous devrez peut-être repenser votre mise en œuvre, mais jamais un meilleur exemple des pièges de la mauvaise conception. – deanvmc