0
私が取り組んでいるプロジェクトのいくつかの簡単なクラスを作成しようとしています。私は循環参照の問題に遭遇しています、そして、私はここでの解決策が何であるか分かりません。私のクラスは間違って設計されている可能性があることを理解していますので、これを正しく行う方法に関する全般的な推奨事項に感謝します。参照クラス内の同じクラス
私は、このクラスとリファレンスをどのように構築しているかを示すために、コードを細かい部分まで細かく切り詰めました。
Public Class Utilities
Public Class Result
Public Success As Boolean = False
End Class
End Class
Public Class Customer
Public Class Contact
Public Class ContactList : Inherits Utilities.Result
Public Contact As Contact()
End Class
Public ID As String
Public Created As Date
Public CreatedBy As New Contact
Public Shared Function Search(oInput As Contact) As ContactList
Dim oOutput As New ContactList
ReDim oOutput.Contact(500)
While oDataReader.Read()
oOutput.Success = True
oOutput.Contact(i) = New Contact()
oOutput.Contact(i).ID = oDataReader("ID").ToString()
oOutput.Contact(i).Created = oDataReader("Created").ToString()
oOutput.Contact(i).CreatedBy.ID = oDataReader("CreatedByID").ToString()
i = i + 1
End While
oDataReader.Close()
ReDim Preserve oOutput.Contact(i-1)
Return oOutput
End Function
End Class
このコードを実行すると、エラーが発生します。「System.StackOverflowException」という例外がスローされました。
は 'クラスContact'は、それ自体が新しい' Contact'を作成するメンバー 'CreatedBy'ています。新しい' Contact'これを作成し、メンバー 'CreatedBy'を持ってい... – Plutonix
これは新しいインスタンスに初期化しなかった "きれいな"ものです。 –
StackOverflowExceptionsは無限再帰によって発生します。デバッガ(ビジュアルスタジオ)を使用してコードをステップ実行すると、メソッドが無限ループで繰り返されることに気付くでしょう。それは犯人になるでしょう。あなたがすでにこれを観察しているなら、質問にその情報を掲示しないことに恥をかく。 – Igor