[英]C# Design Regarding Static Classes and Inheritence
我正在用C#设计纸牌游戏。 每个卡都是Card
类的实例,该实例包含两个属性:卡的唯一ID和对CardData
对象的引用。 CardData
类型的对象实现有关Card
如何在游戏规则中起作用的方法。 许多卡(例如,如果有多个球杆插孔)可以引用相同的卡数据。
public class Card {
public int id;
public CardData card;
}
我的问题是关于我应该如何实现CardData
类。 我的第一个直觉是用一堆诸如WhenPlayed()
和WhenRemoved()
类的方法设计一个抽象基类CardData
,然后为实现它们的每个卡都有一个子类。
public abstract class CardData () {
public abstract void WhenPlayed();
public abstract void WhenRemoved();
}
public class JackOfClubs : CardData () {
public override void WhenPlayed() {
Console.WriteLine( "You played a Jack of Clubs!" );
}
public override void WhenRemoved() {
Console.WriteLine( "Bye for now" );
}
}
但是,由于我从不想实际实例化JackOfClubs
对象,而是实例化Card
并给它们提供对JackOfClubs
类的引用,因此使CardData
类和所有子类为static
是CardData
。 这造成了一个问题,因为据我所知静态类不能继承。
此外,我考虑使用interface
但我希望使用默认方法。 例如,如果我90%的CardData
对象将WhenRemoved()
实现为“ Bye now”,那么为每个子类重新键入该内容将很麻烦。 我可以使用非抽象CardData
类来实现此目的,但不能使用接口。
我的问题是,如果有的话,处理这样的类结构的最佳或正确方法是什么?
我会做这样的设计, 请参考图 ,这样就不会创建太多的类,因为它们实际上是同一类的不同对象。 因此,我们有一个工厂,拥有一个名为Cards的自定义集合,该集合是具有类型和值的Card类的集合。 您可以根据卡的类型和值来实现播放方法。 如果您正在玩的游戏中并没有涉及所有纸牌,那么这种设计就可以很好地工作;如果要将其扩展到多个纸牌游戏中,那么如果再添加一个类别的纸牌类别,则该设计将好。 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.