VB多态构造函数的默认和属性。类似于Listbox的类

时间:2012-02-16 00:24:49

标签: vb.net oop class constructor polymorphism

在这一段时间里,我一直在靠墙撞墙。 我正在尝试使用另一个类创建一个用于在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类中,但无法弄清楚它是如何完成的。

任何帮助将不胜感激。 提前谢谢!

2 个答案:

答案 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)

如果出于某种原因,您需要专门化集合类提供的AddRemove等方法的行为,或者添加其他方法,你需要稍微改变策略。 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)

创建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)