2016-10-12 3 views
0

これらのクラスのカスタムクラスとコレクションクラスがあります。私は実際にこれをすべて実装するのは初めてのことですが、さまざまなオプションがたくさんありますが、それぞれの長所と短所があります。私が必要とする最良の方法を決定するのは難しいです。カスタムクラスとコレクションクラス

たとえば、IDプロパティと説明プロパティを持つProductクラスがあります。 ProductCollectionクラスがあり、基本的にProductオブジェクトで構成される辞書になりたいと思う。キー値でアクセスするとパフォーマンスが向上するため、これは辞書です。これはオブジェクトの参照方法です。キーはProduct.IDで、値はProductです。

ProductCollection.Add(Product)のようなことができるようにしたいと思います。コレクションは、オブジェクトのIDプロパティから辞書キーの署名を処理します。これをどのようにして最高に達成するのですか? Dictionary(Of Integer、Product)を実装し、オブジェクトとプロパティを別々に渡すための基本的にすべてのメソッドをオーバーライドしますか?それとも良い方法がありますか?

さらに、これらのクラスの使用方法を明確にするのに役立つ背景情報を提供するために、すべての可能な製品を含むProductCollectionの「マスター」インスタンスが存在します。 ShipToクラスには、その特定のShipToに適用可能な特定の製品を含むProductCollectionもあります。私の質問はProduct/ProductCollectionクラスに固有のものでしたが、ShipToクラスにも当てはまりました。

+0

コレクションクラスとコレクションクラスです。後者は、(Collection(of T)のような)コレクションから継承し、必要な機能を追加したり、特定の側面をカプセル化したりします。さもなければQは少し広いです – Plutonix

+0

'KeyedCollection'クラスを継承する必要があります:https://msdn.microsoft.com/en-us/library/ms132438(v=vs.110).aspx – jmcilhinney

+0

Plutonix:申し訳ありません、私コレクションクラスを参照していたので、明確にするために質問を更新します。つまり、私の質問はかなり具体的だと思った。 – akksnv

答えて

0

これは私が製品のコレクションを保持する方法です。私は、ProductクラスとProductsコレクションクラスを持っています。

まず、すべてのプロパティを保持しているProductクラスを作成:あなたは、このようにこれらを使用することになり

Public Class Products 
Inherits KeyedCollection(Of String, Product) 

    Protected Overrides Function GetKeyForItem(ByVal item As Product) As String 
     Return item.Key 
    End Function 

End Class 

Productクラスを保持するために Productsコレクションクラスを作成

Imports System.Collections.ObjectModel 
Public Class Product 
Public Key As String 

    Public Sub New(ByVal id As Integer, 
        ByVal description As String) 

     _id = id 
     _description = description 

    End Sub 

    Private _id As Integer 
    Public ReadOnly Property ID() As Integer 
     Get 
      Return _id 
     End Get 

    End Property 

    Private _description As String 
    Public ReadOnly Property Description() As String 
     Get 
      Return _description 
     End Get 
    End Property 

End Class 

Dim myProducts As New Products 
myProducts.Add(New Product(1,"Table")) 
関連する問題