2010-01-27 5 views
4

새 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 
+0

MeidaFactory의 기본 클래스는 무엇입니까? – taylonr

+1

기본 클래스에서 MyBase.new()를 사용하고 싶습니까? –

+1

아마 MediaFactory 생성자 인 코드 스 니펫에 없습니다. 디버깅은 간단하고 단일 단계 만 수행하면 즉시 볼 수 있습니다. –

답변

1

스택 오버플로가 무한 재귀의 경우에 발생합니다. 이것은

Public Sub B() 
A() 
End Sub 

Public Sub A() 
B() 
End Sub 

과 같은 메소드 호출이있을 때 발생합니다. 그런 다음 A() 또는 B()를 호출하십시오. 호출 스택의 크기 (현재 실행중인 하위 프로그램과 프로그램 서브 프로그램을 호출 한 하위 프로그램 등을 추적합니다)은 사용 가능한 공간의 한계에 도달 할 때까지 무한히 커집니다.

귀하의 경우 New() 메소드가 New (1)를 호출하고 MediaFactory의 New() 메소드를 호출하는 것처럼 보입니다 (정수), .new()를 호출하여 팩토리의 New()를 호출합니다.

1

MediaContext에있는 그것 :

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

새로운 CD() -> MediaFactory.New (정수) -> MediaContext.New() -> 새 CD() -> MediaFactory.New (정수) 등 에.

미디어 컨텍스트가 CD에 대해 알 필요가없는 조상 인 경우 새 미디어 컨텍스트를 생성 할 때 새 CD를 만들 필요가 없습니다. MediaFactory 또는 MediaFactory가 MediaContext를 상속하지 않아야합니다.

관련 문제