2012-02-16 6 views
1

私はこのときに私の頭を壁にぶつけていました。 私は銀行取引を保存する別のクラスの人にデータを格納するためのクラスを作成しようとしています。VB多態性コンストラクタのデフォルトとプロパティ。リストボックスと似たクラ​​ス

理想的には、これはすべて隠されていて、プログラマーが使用できる単純な文章、宣言、および関数だけを残してください。これらが含まれます:

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

リストボックスクラスには存在するため、これは可能ですが、それはどのように実行されたのかわかりません。

ご協力いただければ幸いです。 ありがとうございます!

答えて

0

あなたは、この

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)'インタフェースを実装することです。 –

+0

私はそれをオーバーライドせず、オーバーロードして、顧客オブジェクトを追加するのではなく、顧客名を指定するだけで顧客を追加することができます。 'List(Of T)'が継承されるように設計されていない場合は、 'NotInheritable'となっていました。 –

+0

ありがとうございます、必要に応じて正確に動作します:) –

0

Clientオブジェクトの保持に特化した汎用List(Of T) classを使用してください。 1行のコードを書かなくても、あなたが望むすべてのメソッドをすでに提供しています!あなたはすべて保持するためにList(Of T)を作成し、その後

Public Class Client 

    Public Property Name As String 

    Public Property AmountOwned As Decimal 

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

    ' ... etc. 

End Class 

は、だから、最初に「クライアント」に関連するプロパティ(データ)とメソッド(アクション)の全てを含んでい Clientクラスを記述します何らかの理由で、あなたが に必要な、場合

Dim clients As New System.Collections.Generic.List(Of Client) 

Addの動作を特化:Clientクラスのインスタンスのなどのメソッドをコレクションクラスで提供したり、追加のメソッドを追加する場合は、戦略を少し変更する必要があります。 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

すべてがうまくいったこんにちはみんな、のようなクライアントリストを使用することができます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 

を作成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 

を作成します。最後まで... トランザクションクラスでは、クライアントの残高を増減できる必要があります。 入れ子になったトランザクションクラスからクライアントを参照する方法はありますか? ありがとう –

関連する問題