title: c# abstract inheritance design question
body: <p>I am somewhat new to C# and am trying to do a good job following OO principles and write good code. After spending a couple of hours searching for my question, I found some vague answers, but nothing solid enough for me feel confident about. There is a good chance I am asking a dumb question and approaching this problem from the wrong angle.</p>
  
  <p>My Question is: Say I wanted to create a abstract base card class, from which I could compose any card game (for example lets compare a basic deck of playing cards and Magic:The Gathering). Following this: <a href="http://sourcemaking.com/refactoring/replace-type-code-with-class" rel="nofollow">http://sourcemaking.com/refactoring/replace-type-code-with-class</a>, I was able to create a PokerCardType, which is basically a glorified enum for each card in the standard deck. My problem arises from how to create an abstract Card class that requires an instance of a CardType in it, but the specific instance is not determined. My first thought was to create an abstract CardType class, which would have some way of requiring a set of static CardType objects for whatever the subclass would be, but I cannot figure out how to do that. My other question is, does this idea really even make sense, or should I just make two separate class structures, one for poker and one for Magic. If you are wondering why I would want to do this, it is really just for my own education. Thanks for the help or any links you can provide.</p>