2012-02-16 29 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

相关问题