[英]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.