I am building an application that is very similar to a shopping cart. The user selects a product from a list, and then based on that product, a few properties need to be set an
I would avoid making a class for each product. Each of your products are instances of the same Product class.
With such variable properties, a dictionary approach (basically a map of key-value pairs, type specific or not, is a great way to retain flexibility in the design. You aren't talking about amazon.com sized product inventory, so I think it is a good enough design for the perf you need.