2012-02-16 63 views
1

我一直在撞牆的時候撞到牆上。 我試圖創建一個類來存儲數據與另一個類的人存儲他們的銀行交易。VB多態構造函數默認值和屬性。類似Listbox的類別

理想情況下,這一切都隱藏起來,只留下程序員可用的簡單陳述,聲明和功能。這些措施包括:

  • 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()

我知道這是可能的,因爲這些存在於Listbox類中,但無法弄清楚它是如何完成的。

任何幫助,將不勝感激。 在此先感謝!

回答

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 

創建ClientList

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)」接口。 – 2012-02-16 02:15:41

+0

我不重寫它,我重載它,使得通過指定客戶名稱而不是添加客戶對象來添加客戶成爲可能。如果'List(Of T)'不是被設計爲被繼承的,那麼它將被設置爲'NotInheritable'。 – 2012-02-16 02:26:34

+0

謝謝,完全按照要求工作:) – 2012-02-16 12:38:48

0

使用通用List(Of T) class,專門用於容納您的Client對象。它已經提供了所有您想要的方法,而無需編寫一行代碼!

所以,你會先寫有關「客戶」一個Client類包含所有屬性(數據)和方法(行動)的:

Public Class Client 

    Public Property Name As String 

    Public Property AmountOwned As Decimal 

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

    ' ... etc. 

End Class 

然後,你會創建List(Of T)容納所有您的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 

的WinForms的ListBox類不這樣做完全一樣,因爲之前仿製藥被引入到框架它被寫。但是,既然他們現在在這裏,並且您應該儘可能使用它們,您完全可以忽略WinForms如何執行操作。

+0

嗨,大家好,一切都進展順利直到最後... 在交易類中,我需要能夠增加或減少客戶餘額。 任何想法如何從嵌套事務類引用客戶端? 再次感謝 – 2012-02-21 03:15:50

相關問題