【发布时间】:2015-11-03 10:52:44
【问题描述】:
我正在学习泛型/使用依赖注入/接口以便拥有松散耦合的类 - 但是,我正在努力。
对于以下简单的卡片/卡片组示例,我如何才能最好地调整这些类(使用上述技术),以便我可以传递任何类型的“卡片/ICard”列表,以便卡片组能够填充/打印说类型。因此,例如,在 Main 中,我希望能够传入 List 或 List,并且让 deck 能够以任何一种方式处理。
Deck.cs
public class Deck
{
List<Card> cards;
public Deck(List<Card> cards)
{
this.cards = cards;
foreach (Card.Suit suit in Enum.GetValues(typeof(Card.Suit))) {
foreach (Card.Val value in Enum.GetValues(typeof(Card.Val))) {
cards.Add(new Card(suit, value));
}
}
}
public void printDeck()
{
foreach(Card x in cards)
{
Console.WriteLine(x.ToString());
}
}
}
}
卡片.cs
public class Card : ICard {
Suit suit;
Val value;
public Card(Suit suit, Val value)
{
this.suit = suit;
this.value = value;
}
public override string ToString()
{
string formatCard = "Suit: " + suit + " Value: " + value;
return formatCard;
}
public enum Suit
{
HEARTS = 1,
SPADES = 2,
CLUBS = 3,
DIAMONDS = 4
}
public enum Val
{
ONE = 1,
TWO = 2,
THREE = 3,
FOUR = 4,
FIVE = 5
}
}
}
SpecialCard.cs
public class SpecialCard : ICard{
Suit suit;
Val val;
public SpecialCard(Suit suit, Val val)
{
this.suit = suit;
this.val = val;
}
public override string ToString()
{
string formatCard = "Dragon: " + suit + " Value: " + val;
return formatCard;
}
public enum Suit
{
RIDGEBACK = 1,
FIREBALL = 2,
SHORTSNOUT = 3,
HORNTAIL = 4
}
public enum Val
{
UNO = 1,
DOS = 2,
TRES = 3,
QUATTRO = 4,
CINCZ = 5
}
}
}
ICard.cs
public interface ICard
{
string ToString();
}
主要
static void Main()
{
Deck deck = new Deck(new List<Card>());
deck.printDeck();
Console.ReadKey();
}
感谢您的任何指点! 元年
【问题讨论】:
-
ICard 理想情况下应该具有 Suit 和 Val 属性,因为它们定义了每张卡必须遵守的合同 (
ICard)。 Suit 和 Val 枚举也可以在所有常量合并的类外部定义(来自 Card 和 SpecialCard)。那么你真的不需要 SpecialCard 类型。 -
如果我合并常量,我将如何拥有不同类型的卡片(即一种具有普通花色,一种以虚构龙命名的花色..)并能够决定在主要?感谢您的帮助。
标签: c# generics interface dependency-injection