В. Б. Полиморфизм конструкторов по умолчанию и свойства.Подобный класс в список - PullRequest
1 голос
/ 16 февраля 2012

Я уже некоторое время стучал головой об стену. Я пытаюсь создать класс для хранения данных о людях с другим классом для хранения своих банковских транзакций.

В идеале все это должно быть скрыто и оставить программисту только простые инструкции, объявления и функции. Это будет включать:

  • 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 голосов
/ 16 февраля 2012

Создать 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)
0 голосов
/ 16 февраля 2012

Используйте общий List(Of T) класс , специализированный для хранения ваших 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 и т. Д., Предоставляемых классом коллекции, или добавить дополнительные методы, вам необходимо изменить стратегии немного. Вместо использования List(Of T) вы наследуете от Collection(Of T) и создаете собственный класс коллекции следующим образом:

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

    ' ... customize as desired ...

End Class

Класс WinForms ListBox делает это не совсем так, потому что он был написан до того, как дженерики были представлены в фреймворке. Но так как они сейчас здесь, и вы всегда должны использовать их, когда это возможно, вы можете полностью игнорировать то, как работает WinForms.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...