akksnv akksnv - 6 months ago 37
Vb.net Question

Custom Classes and Collection Classes

I have some custom classes and collection classes for those classes. I'm kind of new to actually implementing all of this, and I see a lot of different options but all with their own pros and cons, and I'm having trouble determining the best/right way to do what I need.

For example, I have a Product class with ID and Description properties. I have a ProductCollection class that I basically want to be a dictionary consisting of Product objects. This is a dictionary because there is a performance gain in accessing by key value, which is how I'll reference the objects. The key is Product.ID, and the value is Product.

I'd like to be able to do something like ProductCollection.Add(Product), and the collection will handle signing the dictionary key from the object's ID property. How do I best accomplish this? Implement Dictionary(Of Integer, Product) and override basically all methods to pass in the object and property separately? Or is there a better way?

Also, to give a little more background information to help clarify usage of these classes, there will be a "master" instance of ProductCollection containing all possible products. A ShipTo class will also have a ProductCollection containing specific products that are applicable for that particular ShipTo. My question was specific to the Product/ProductCollection classes, but also applied to the ShipTo classes.


Is this the kind of thing you're looking for:

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

   Public Sub New(ByVal make As String,
                  ByVal model As String)

      _make = make
      _model = model

   End Sub

   Private _make As String
   Public ReadOnly Property Make() As String
          Return _make
      End Get

   End Property

   Private _model As String
   Public ReadOnly Property Model() As String
          Return _model
      End Get
   End Property

End Class

Public Class Cars
Inherits KeyedCollection(Of String, Car)

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

End Class

You would then use it like this:

Dim myCars as new Cars
myCars.Add(New Car("Make","Model"))