簡體   English   中英

有關靜態類和繼承的C#設計

[英]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類和所有子類為staticCardData 這造成了一個問題,因為據我所知靜態類不能繼承。

此外,我考慮使用interface但我希望使用默認方法。 例如,如果我90%的CardData對象將WhenRemoved()實現為“ Bye now”,那么為每個子類重新鍵入該內容將很麻煩。 我可以使用非抽象CardData類來實現此目的,但不能使用接口。

我的問題是,如果有的話,處理這樣的類結構的最佳或正確方法是什么?

我會做這樣的設計, 請參考圖 ,這樣就不會創建太多的類,因為它們實際上是同一類的不同對象。 因此,我們有一個工廠,擁有一個名為Cards的自定義集合,該集合是具有類型和值的Card類的集合。 您可以根據卡的類型和值來實現播放方法。 如果您正在玩的游戲中並沒有涉及所有紙牌,那么這種設計就可以很好地工作;如果要將其擴展到多個紙牌游戲中,那么如果再添加一個類別的紙牌類別,則該設計將好。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM