在这一段时间里,我一直在靠墙撞墙。 我正在尝试使用另一个类创建一个用于在People上存储数据的类来存储他们的银行交易。
理想情况下,这一切都被隐藏起来,只留下程序员可用的简单语句,声明和函数。这些将包括:
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 :(得分: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
,Remove
等方法的行为,或者添加其他方法,你需要稍微改变策略。 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的工作方式。
答案 1 :(得分:0)
创建Transaction
和Client
类
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)