2012-02-16 2 views
1

나는 언젠가 이것에 대해 벽에 머리를 치고 있었다. 은행 거래를 저장할 다른 클래스가있는 사람들에 대한 데이터를 저장하기위한 클래스를 만들려고합니다.VB 다형성 생성자 기본값 및 속성. 리스트 박스와 비슷한 클래스

이상적으로이 모든 것을 숨기고 프로그래머가 사용할 수있는 간단한 문장, 선언 및 함수 만 남겨 두는 것이 이상적입니다. 이들은 다음을 포함한다 :

  • Dim Clients As New ClientList
  • Clients.Count 'readonly integer
  • Clients.Add("S")
  • Clients.Refresh()
  • Clients(n).Remove()
  • Clients(n).Transaction.Add()
  • Clients(n).Transaction(n).Remove()

목록 상자 클래스에 존재하기 때문에 이것이 가능하다는 것을 알고 있습니다. 그러나 어떻게 완료되었는지는 알 수 없습니다.

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

답변

0

TransactionClient 클래스

Public Class Transaction 
    'TODO: Implement Transaction 
End Class 

Public Class Client 
    Public ReadOnly Transactions As List(Of Transaction) = New List(Of Transaction) 

    Public Sub New(ByVal name As String) 
     Me.Name = name 
    End Sub 

    Public Name As String 
End Class 

Public Class ClientList 
    Inherits List(Of Client) 

    Public Overloads Sub Add(ByVal name As String) 
     Add(New Client(name)) 
    End Sub 

    Public Sub Refresh() 
     ' Do what ever you want Refresh to do 
    End Sub 
End Class 

당신은 다음이

Dim clients As New ClientList 

clients.Add("S") 
' Or 
clients.Add(New Client("T")) 

Dim n As Integer = clients.Count 
Dim m As Integer = clients(0).Transactions.Count 

clients.Refresh() 
clients.RemoveAt(5) 
clients(n - 1).Transactions.Add(New Transaction()) 
clients(n - 1).Transactions.RemoveAt(2) 
Dim name As String = clients(0).Name 
Dim client As Client = clients(0) 
+0

정말 List (Of T)를 상속해서는 안됩니다. 그것은 상속받을 수 있도록 설계되지 않았고,'Add' 메소드는 가상 (오버라이드)이 아닙니다. 권장되는 방법은'Collection (Of T)'를 상속하거나'IList (Of T)'인터페이스를 구현하는 것입니다. –

+0

고객 개체를 추가하는 대신 고객 이름을 지정하여 고객을 추가 할 수 있으므로 오버로드하지 않고 오버로드합니다. List (Of T)가 상속 받도록 설계되지 않았다면, 그것은 NotInheritable이되었을 것이다. –

+0

감사합니다. 정확하게 작동합니다. :) –

0

Client 개체를 보관하는 특수한 List(Of T) class을 사용하십시오. 한 줄의 코드를 작성하지 않고도 원하는 모든 메소드를 이미 제공합니다! 모든 유지하기 위해 List(Of T)을 만들 것, 그리고

Public Class Client 

    Public Property Name As String 

    Public Property AmountOwned As Decimal 

    Public Sub Bill() 
     BillingManager.BillClient(Me) 
    End Sub 

    ' ... etc. 

End Class 

:

그래서 먼저 "클라이언트"에 관한 속성 (데이터)과 방법 (행동)을 모두 포함 된 Client 클래스를 작성합니다 Client 클래스의 인스턴스의 :

Dim clients As New System.Collections.Generic.List(Of Client) 

하면, 어떤 이유로, 당신은 Add,의 동작을 전문으로 에 필요등의 메소드를 사용하거나 추가 메소드를 추가 할 경우 전략을 약간 변경해야합니다. Instead of using List(Of T), 당신은 Collection(Of T)에서 상속과 같이 사용자 지정 컬렉션 클래스를 만들 것이다 :

Public Class ClientCollection 
    Inherits System.Collections.ObjectModel.Collection(Of T) 

    ' ... customize as desired ... 

End Class 

윈폼 ListBox 클래스는 정확히 제네릭이 프레임 워크 도입 전에 쓰여진 때문에 이런 식으로하지 않습니다. 그러나 이제는 여기에 있기 때문에 가능한 경우 항상 사용해야합니다. WinForms가 어떻게 작동하는지 완전히 무시할 수 있습니다.

+0

안녕 얘들처럼 클라이언트 목록을 사용할 수있는 ClientList 클래스를 만들기, 모두 잘 갔다 끝날 때까지 ... 거래 클래스에서 고객의 잔액을 늘리거나 줄일 수 있어야합니다. 중첩 된 트랜잭션 클래스에서 클라이언트를 참조하는 방법에 대한 아이디어가 있습니까? 다시 한 번 –