I am trying to create a representation of various types of card that inherit from a generic card class and which all contain references to their owning decks.
I tried re-declaring them, as suggested here, but it still won't convert to the specific card type.
The code I currently have is as such:
public class Deck<T> : List<T>
where T : Card
{
void Shuffle()
{
throw new NotImplementedException("Shuffle not yet implemented.");
}
}
public class Card
{
public Deck<Card> OwningDeck { get; set; }
}
public class FooCard : Card
{
public Deck<FooCard> OwningDeck
{
get
{
return (Deck<FooCard>)base.OwningDeck;
}
set
{
OwningDeck = value;
}
}
}
The compile-time error I am getting:
Error 2 Cannot convert type Game.Cards.Deck<Game.Cards.Card>
to Game.Cards.Deck<Game.Cards.FooCard>
And a warning suggesting I use a new operator to specify that the hiding is intentional. Would doing so be a violation of convention? Is there a better way?
My question to stackoverflow is this: Can what I am trying to do be done elegantly in the .NET type system? If so, can some examples be provided?