title: OOGenerics Design Considerations
body: <p>Here is the situation for which I am trying to find a suitable design.</p>
  
  <p>I need to store profiles of numbers. A profile is just a series of numbers.  They can be of either int, float or decimal type.  Each profile has a ProfileDescription field based on an ennumeration.    </p>
  
  <p>Each Profile has a collection of ProfileVersion Objects.  Each ProfileVersion object has a collection of ProfileValue objects.  These ProfileValue objects are where the actual numerical values of the required type are stored.</p>
  
  <p>My initial design idea was to make Profile, ProfileVersion and ProfileValue generic.  I hit a problem when I want to have a List of Profiles of different types, which I cannot have.  I could use an ArrayList instead, but then i would have to cast out the data within it.</p>
  
  <p>I though it might be possible to make just ProfileVersion and ProfileValue generic, and then have the Profile Object assign a type to the ProfileVersion depending on the value of the ProfileDescription field, but I cannot find a way to do this.</p>
  
  <p>Another thought was I should use a ProfileBase class and then subclass it with either a GenericProfileClass or IntProfile, FloatProfile and DecimalProfile, but this wouldn't really give me any advantage over having each class being generic, as I would have to cast out the subclass each time anyway.</p>
  
  <p>I would appreciate your thoughts on the best design approach for this situation.</p>
  
  <p>Thanks</p>