2010-06-02 2 views
0

이것은 my previous question과 관련이 있지만 다른 문제입니다.Null 참조가 아닌가요?

두 가지 클래스가 있습니다 : 서버와 데이터베이스.

Public Class Server 

Private _name As String 
Public Property Name() As String 
    Get 
     Return _name 
    End Get 
    Set(ByVal value As String) 
     _name = value 
    End Set 
End Property 


Private _databases As List(Of Database) 
Public Property Databases() As List(Of Database) 
    Get 
     Return _databases 
    End Get 
    Set(ByVal value As List(Of Database)) 
     _databases = value 
    End Set 
End Property 


Public Sub LoadTables() 
    Dim db As New Database(Me) 
    db.Name = "test" 

    Databases.Add(db) 

End Sub 
End Class 

Public Class Database 
Private _server As Server 

Private _name As String 
Public Property Name() As String 
    Get 
     Return _name 
    End Get 
    Set(ByVal value As String) 
     _name = value 
    End Set 
End Property 


Public Property Server() As Server 
    Get 
     Return _server 
    End Get 
    Set(ByVal value As Server) 
     _server = value 
    End Set 
End Property 


Public Sub New(ByVal ser As Server) 
    Server = ser 
End Sub 
End Class 

매우 간단

. 나는 다음과 같이 사용한다 :

Dim s As New Server 
    s.Name = "Test" 
    s.LoadTables() 

문제는 Server 클래스의 LoadTables에있다. Databases.Add (db)를 치면 NullReference 오류가 발생합니다 (Object reference not set). 나는 그것을 얻는 방법을 이해하지 못한다. 모든 물체가 설정되어있다. 어떤 아이디어? 감사.

+0

으로 변경해보세요. 감사합니다. 나는 그것을 완전히 놓쳤다. –

답변

4

Databases은 null입니다. 내가 볼 수없는

Private _databases As New List(Of Database) 
+1

+1 코드 예 –

4

실제로 개체를 추가하려는 목록을 만들지 않았습니다. 당신은 그 속성을 만들었고 그 속성을지지합니다. 일반적으로 생성자에서 또는 선언의 일부로 목록을 인스턴스화하고 할당해야합니다.

Public Sub New() 
    Databases = New List(Of Database) 
End Sub 
2

변경을 어디에 그것이 널 포인터의 약자로 개인 필드가 시작되고있는 _databases.

2

Databases 재산

Private _databases As List(Of Database) 
Public Property Databases() As List(Of Database) 
    Get 
     Return _databases 
    End Get 
    Set(ByVal value As List(Of Database)) 
     _databases = value 
    End Set 
End Property 

게터 여기에 단순히 필드 _databases를 반환하는 코드를 자세히 살펴 보자. 이 필드는 정의되었지만 초기화되지 않으므로 Null/Nothing입니다. 입력란을

Private _databases As New List(Of Database) 
관련 문제