gpt4 book ai didi

vb.net - 如何创建不会导致无限循环的工厂对象

转载 作者:行者123 更新时间:2023-12-01 04:20:13 26 4
gpt4 key购买 nike

每当我尝试创建一个新的 CD 对象时,都会出现堆栈溢出。我想要一个参数被传递到 mediaFactory 以便它可以确定创建什么类型的媒体。任何人都可以指出为什么我在执行此操作时可能会遇到问题“将媒体调暗为 CD = 新 CD()”

谢谢

Public MustInherit Class MediaFactory
Inherits MediaContext
Implements IMedia

Public Sub New(ByVal typeId As Integer)
MyBase.new()
_mediaTypeId = typeId
End Sub

Private _mediaTypeId As Integer
Public Property mediaTypeId() As Integer Implements IMedia.mediaTypeId
Get
Return _mediaTypeId
End Get
Set(ByVal value As Integer)
_mediaTypeId = value
End Set
End Property

End Class


Public Class CD
Inherits MediaFactory
Implements IMedia

Public Sub New()
MyBase.New(1)
End Sub

Public Sub New(ByVal name As String)
MyBase.New(1)
MyBase.title = name
End Sub

End Class


Public Class MediaContext

Private Shared _strategies As New Dictionary(Of MediaEnum, IMedia)()

Public Sub New()
_strategies.Add(MediaEnum.CD, New CD())

End Sub

Public Sub New(ByVal name As String)
_title = name
End Sub

Private _title As String
Public Property title() As String
Get
Return _title
End Get
Set(ByVal value As String)
_title = value
End Set
End Property

End Class

最佳答案

在无限递归的情况下会发生堆栈溢出。当您有如下方法调用时会发生这种情况:

Public Sub B()
A()
End Sub

Public Sub A()
B()
End Sub

然后调用 A() 或 B()。调用堆栈的大小(跟踪当前正在运行的子程序,以及调用它的子程序,等等直到程序的主程序)无限增长,直到达到可用空间的限制。 (它看起来像 A > B > A > B > A > B... 等等)

在您的情况下,您的 New() 方法似乎调用了 New(1),后者又调用了 MediaFactory 的 New(integer),后者调用了 .new(),后者调用了您工厂的 New()...希望您能了解情况.

关于vb.net - 如何创建不会导致无限循环的工厂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2150797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com