2012-01-09 2 views
2

У меня есть 2 класса. Роль пользователя и как этотVB.NET Свойства моего класса попадают в круглые ссылки и, таким образом, исключение StackOverflow

Роль

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 

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

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

+0

'Me.CreatedBy Is Nothing'? Может ли это быть чем-то иным, чем «Nothing» в конструкторе? –

ответ

2

Создание конструктора перегрузок в каждом из ваших классов передать принимающий объект:

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

+1 для перегрузки конструктора. Тем не менее, я бы бросил тесты на «Ничто». –

+0

@ OlivierJacot-Descombes: Отличная точка. Я обновил ответ. –