VB.NET Мои свойства класса заканчиваются в Циркулярных ссылках и, таким образом, исключение StackOverflow - PullRequest
2 голосов
/ 09 января 2012

У меня есть 2 класса.Роль и пользователь, как это

Роль

Public Class Role
    Public Property RoleID As Integer
    Public Property CreatedBy As User

    Sub New()    
        If Me.CreatedBy Is Nothing Then
            Me.CreatedBy = New User()
        End If
End Class

Пользователь

Public Class User
    Public Property UserID As Integer
    Public Property Role As Role

  Public Sub New()
        If Me.Role Is Nothing Then
            Me.Role = New Role()
        End If
    End Sub
End Class

Ситуация похожа, когда мы создаемРоли, мы спасем, кто создал эту роль.Итак, у меня есть свойство CreatedBy типа User.Точно так же, когда мы создаем пользователя, мы будем упоминать, к какой роли принадлежит новый пользователь. Так что у меня есть свойство под названием «Роль» типа «Роль».Эта циклическая ссылка дает мне исключение StackOverflow в качестве его рекурсивного, когда я создаю объект класса User.

Как мне справиться с этим?я должен реструктурировать свои дела?как?

1 Ответ

2 голосов
/ 09 января 2012

Создание перегрузок конструктора в каждом из ваших классов для передачи хост-объекта:

Public Class User
    Public Property UserID As Integer
    Public Property Role As Role

    Public Sub New()
        Me.Role = New Role(Me)
    End Sub
    Public Sub New(oRole As Role)
        Me.Role = Role
    End Sub
End Class

Public Class Role
    Public Property RoleID As Integer
    Public Property CreatedBy As User

    Sub New()
        Me.CreatedBy = New User(Me)
    End Sub
    Public Sub New(oUser As User)
        Me.CreatedBy = oUser
    End Sub
End Class
...