【发布时间】:2023-02-22 00:49:53
【问题描述】:
我有一个类 Deck 处理游戏中使用的 Cards。
这是基础抽象 Card 类,它只定义了每个卡值 (int):
public abstract class Card
{
private int value;
protected Card(int newValue)
{
this.value = newValue;
}
public int getValue() => value;
public void setValue(int n)
{
value = n;
return;
}
}
一些 Card 实现:
俱乐部
public class Club : Card
{
public Club(int newValue) : base(newValue)
{
}
}
钻石
public class Diamond : Card
{
public Diamond(int newValue) : base(newValue)
{
}
}
心
public class Heart : Card
{
public Heart(int newValue) : base(newValue)
{
}
}
长钉
public class Spike : Card
{
public Spike(int newValue) : base(newValue)
{
}
}
现在我想要在Deck 中每种类型的 10 个 Cards,总共 40 个 Cards(10 Heart,10 Spikes...)
所以我在 Deck 类中使用这段代码:
public class Deck
{
List<Card> cards;
public Deck() {
cards = new List<Card>();
populate();
}
void populate()
{
for(int i=1;i==10;i++)
cards.Add(new Club(i));
for (int i = 1; i == 10; i++)
cards.Add(new Heart(i));
for (int i = 1; i == 10; i++)
cards.Add(new Spike(i));
for (int i = 1; i == 10; i++)
cards.Add(new Diamond(i));
}
}
它有效,但我想要类似的东西:
void populate(){
[Heart,Spike,Club,Diamond].foreach((e) -> cards.add(e.generateTen()))
}
我不知道这是否是正确的编写方式,请将其作为伪代码阅读我是 C# 的新手,感谢您的帮助。
【问题讨论】:
-
旁注:C# 不是 Java - 请使用属性而不是 getXxxx/setXxxx 方法。
-
你绝对不需要为每套牌套不同的类别。并且试图在不需要的地方设计多态性确实是一个坏主意。此外,泛型与您在此处展示的内容无关。
-
顺便说一句,这是对多态性的一种糟糕使用。所有实现都具有相同的行为,只是它们的值不同。
Card还不如不抽象,那样你就省了很多麻烦。 -
public enum Suit { Club, Diamond, Heart, Spade } public class Card { public Suit Suit { get; set; } public int Value { get; set; } }。这是应该做的。 -
请注意,在 C# 中要动态创建一个数组,如
[Heart,Spike,Club,Diamond],您需要new关键字,并且需要指定数组类型。在上面的代码中,您没有描述 Heart、Spike、Club、Diamond 分别是什么?它们是原语、类还是其他什么?